ฉันกำลังจำลองภาษาการเขียนโปรแกรมเพื่อความสนุกสนานและไวยากรณ์ได้รับอิทธิพลอย่างมากจาก Scala - คำจำกัดความของฟังก์ชันเฉพาะ
ฉันได้พบปัญหาการออกแบบเพราะภาษาของฉันไม่ได้แยกความแตกต่างระหว่างการทำงานที่กำหนดไว้ผ่านทางdef
ไวยากรณ์ (วิธีการเรียน) และฟังก์ชั่นที่ไม่ระบุชื่อที่ได้รับมอบหมายให้เป็นค่า (สร้างขึ้นโดยใช้=>
) - มันเอาความแตกต่างทั้งในการดำเนินงานและพฤติกรรม
ผลลัพธ์คือนิยามสองคำต่อไปนี้หมายถึงสิ่งเดียวกัน:
def square(x: Int) = x*x
val square = (x: Int) => x*x
ไม่มีเหตุผลสำหรับแบบฟอร์มหลัง (การกำหนดฟังก์ชันที่ไม่ระบุชื่อแบบทันที) ที่จะใช้ในสถานการณ์ปกติใด ๆ - เป็นไปได้ที่จะใช้แทนdef
แบบฟอร์ม
จะมีไวยากรณ์ที่ซ้ำกันดังกล่าวสำหรับการกำหนดฟังก์ชั่นที่มีชื่อทำร้ายความ orthogonality ของภาษาหรือด้านการออกแบบอื่น ๆ ?
ฉันชอบโซลูชันนี้เพราะช่วยให้คำจำกัดความสั้น ๆ และใช้งานง่ายของวิธีการและฟังก์ชั่นที่มีชื่อ (ผ่านdef
) และคำจำกัดความสั้น ๆ ของฟังก์ชั่นที่ไม่ระบุชื่อ (ใช้=>
)
แก้ไข: Scala จะแยกความแตกต่างระหว่างสอง - ฟังก์ชั่นที่ไม่ระบุชื่อไม่เหมือนกับวิธีที่กำหนดด้วยdef
ใน Scala ความแตกต่างนั้นค่อนข้างบอบบาง - ดูโพสต์ที่ฉันเชื่อมโยงก่อน
val
สัญลักษณ์ของคุณ?
fun
เพื่อกำหนดฟังก์ชั่นวนซ้ำ
def
คือ เป็นเพียงผลข้างเคียงของความจริงที่ว่าฟังก์ชั่นที่ไม่ระบุชื่อการพูด(x : Int) => x + 1
คือวัตถุและวัตถุสามารถกำหนดให้กับค่าval f = ...
ได้ นักออกแบบภาษาจะต้องออกไปเพื่อไม่อนุญาตให้ใช้ไวยากรณ์ มันไม่เหมือนกับการพยายามสนับสนุนไวยากรณ์ที่แตกต่างกันสองอย่างที่ทำ (โดยประมาณ) ในสิ่งเดียวกัน
However, assigning existing functions
ดูเหมือนว่าจะหายไปในตอนท้ายของประโยค