ใน Scala 'val a: A = _' (ขีดล่าง) หมายความว่าอย่างไร


คำตอบ:


143

val a: A = _เป็นข้อผิดพลาดในการคอมไพล์ ตัวอย่างเช่น:

scala> val a: String = _
<console>:1: error: unbound placeholder parameter
       val a: String = _
                       ^

งานคืออะไรvar a: A = _(หมายเหตุvarแทนval) ดังที่ Chuck กล่าวไว้ในคำตอบของเขาสิ่งนี้จะเริ่มต้นตัวแปรเป็นค่าเริ่มต้น จากข้อกำหนดภาษาสกาล่า:

0 ถ้า T เป็น Int หรือหนึ่งในประเภทย่อยของมัน
0L ถ้า T ยาว
0.0f ถ้า T คือลอย
0.0d ถ้า T เป็นสองเท่า
เท็จถ้า T เป็นบูลีน
() ถ้า T เป็นหน่วย
ว่างสำหรับประเภทอื่น ๆ ทั้งหมด T.


6
ฮ่า ๆ จับสวิตช์ val / var ได้ดี สมองของฉันเพิ่งผ่านมันไป
Chuck

2
ข้อมูลเชิงลึกว่าทำไมถึงไม่ได้รับการสร้างขึ้นมาเพื่อทำงานร่วมกับval?
Erik Kaplun

4
@ErikAllik: นี่เป็นการคาดเดาที่บริสุทธิ์ แต่val a: Int = _อาจเป็นข้อผิดพลาดในการรวบรวมเพราะมันจะเป็นการปฏิบัติที่ไม่ดีถ้ามันได้ผล val a: Int = 0มันก็จะเป็นวิธีที่ยุ่งเหยิงของการเขียน การตั้งค่า a varเป็นค่าเริ่มต้นนั้นสมเหตุสมผลเนื่องจาก a varคาดว่าจะเปลี่ยนแปลง แต่ a valได้รับการแก้ไขดังนั้นแนวทางปฏิบัติที่ดีที่สุดคือกำหนดค่าอย่างชัดเจน
Shuklaswag

1
@Shuklaswag: เฉพาะในกรณีที่คุณรู้จำนวนเต็ม ฉันกำลังพยายามใช้สิ่งนี้เพื่อเริ่มต้นค่าประเภทที่ฉันยังไม่รู้
Adrian

33

มันเริ่มต้นเป็นค่าเริ่มต้นประเภทa Aตัวอย่างเช่นค่าดีฟอลต์ของ Int คือ 0 และค่าดีฟอลต์ของชนิดการอ้างอิงเป็นโมฆะ


10
ค่าเริ่มต้นของคลาสที่ผสมในNotNullลักษณะคืออะไร? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet: ณ สกาล่า 2.9.0.1 (ซึ่งเป็นรุ่นล่าสุดที่ผมเคยใช้) ค่าเริ่มต้นของการเรียนที่ผสมในลักษณะ NotNull คือ - หยุดละคร - null ผมคาดหวังนี้อาจจะมีการเปลี่ยนแปลงในบางจุด แต่ขณะนี้ดูเหมือนว่าปั้น_ NotNull
Chuck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.