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