ฉันกำลังจำลองภาษาการเขียนโปรแกรมเพื่อความสนุกสนานและไวยากรณ์ได้รับอิทธิพลอย่างมากจาก 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ดูเหมือนว่าจะหายไปในตอนท้ายของประโยค