การนำเข้านี้มีความหมายว่าอย่างไรใน Scala

ฉันพบสิ่งต่อไปนี้ในโค้ด Scala:

class MyClass {
  ...
  val a = new A; import a._

}

val a = new A; import a._ หมายถึงอะไรกันแน่?


person Michael    schedule 10.05.2012    source แหล่งที่มา


คำตอบ (3)


มันนำเข้าวิธีการและตัวแปรของวัตถุ ดังนั้นหากคุณต้องการโทร a.foo() คุณสามารถโทร foo() แทนได้

person sepp2k    schedule 10.05.2012

หมายความว่าวิธีการและตัวแปรทั้งหมดของวัตถุ a ประเภท A มีอยู่ในบล็อกนี้ (ขอบเขต) โดยไม่ต้องกล่าวถึง a อย่างชัดเจน ดังนั้นหาก A มีเมธอด bar() คุณสามารถพูดได้ว่า:

bar()

แทน

a.bar()

แต่ภายในขอบเขตที่กำหนด import เท่านั้น

person Tomasz Nurkiewicz    schedule 10.05.2012

มาอธิบายเรื่องนี้ด้วยสิ่งที่คุณควรทำความคุ้นเคย:

println("Hello world")

คำถามคือ: ทำไมมันถึงได้ผล? ไม่มีวัตถุที่เรียกว่า println ด้วยวิธีการ apply ซึ่งเป็นคำอธิบายปกติสำหรับโค้ดที่มีลักษณะเช่นนั้น เมื่อมันเกิดขึ้น โค้ดด้านบนกำลังทำสิ่งนี้จริงๆ:

Predef.println("Hello world")

กล่าวอีกนัยหนึ่ง println เป็นวิธีการบนวัตถุ scala.Predef แล้วคุณจะใช้มันเหมือนข้างบนได้อย่างไร? เช่นนี้:

import scala.Predef._
println("Hello world")

การนำเข้าเนื้อหาของ การอ้างอิงที่มีเสถียรภาพ (เช่น ไม่ใช่ var หรือ def) จะทำให้วิธีการต่างๆ ใช้งานได้โดยไม่ต้องขึ้นต้นด้วย reference.

นอกจากนี้ยังทำให้มีการกำหนดนัยภายในไว้ด้วย ซึ่งเป็นวิธีการทำให้การแปลงโดยนัยที่กำหนดไว้ภายใน scala.Predef พร้อมใช้งานเช่นกัน -- Scala นำเข้าเนื้อหาของ java.lang, scala และ scala.Predef (ตามลำดับ ดังนั้นรายการหลังจะแทนที่รายการก่อนหน้า) .

person Daniel C. Sobral    schedule 10.05.2012