การเรียกใช้ฟังก์ชันสกาล่าโดยใช้ชื่อ
ล่ามสกาล่าในสองวิธีพารามิเตอร์ฟังก์ชั่นการวิเคราะห์ (อาร์กิวเมนต์ของฟังก์ชัน) เมื่อ:
- สำหรับการโทร (โทรโดยค่า): ค่าของพารามิเตอร์การแสดงออกที่มีการคำนวณก่อนแล้วจึงนำไปใช้กับฟังก์ชั่นภายใน
- โดยการเรียกชื่อ (เรียกโดยชื่อ): การแสดงออกพารามิเตอร์ไม่ได้ผลโดยตรงกับการคำนวณของฟังก์ชั่นภายใน
ก่อนจะเข้าสู่ภายในฟังก์ชั่นที่เรียกว่าโดยค่าได้รับการคำนวณมูลค่าของการแสดงออกพารามิเตอร์และเรียกชื่อโดยการแสดงออกอาร์กิวเมนต์เป็นค่าที่คำนวณได้ภายในฟังก์ชั่น
นี้ทำให้เกิดปรากฏการณ์ที่เรียกตามชื่อแต่ละเมื่อล่ามจะถูกคำนวณครั้งเดียวคุ้มค่าของการแสดงออกในการใช้
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("获取时间,单位为纳秒") System.nanoTime } def delayed( t: => Long ) = { println("在 delayed 方法内") println("参数: " + t) t } }
ตัวอย่างข้างต้นเราประกาศวิธีการล่าช้าเรียกตามชื่อที่จะตั้งชื่อตัวแปรและพิมพ์โดยใช้ = สัญลักษณ์> การดำเนินงานของโค้ดข้างต้นออกผลมีดังนี้:
$ scalac Test.scala $ scala Test 在 delayed 方法内 获取时间,单位为纳秒 参数: 241550840475831 获取时间,单位为纳秒
ตัวอย่างของวิธีการที่จะพิมพ์ข้อมูลล่าช้าแสดงให้เห็นวิธีการวิธีการพิมพ์แล้วล่าช้าค่าที่ได้รับและในที่สุดก็กลับไป T