ดังนั้น,ที่แยกกำหนด precedence เป็นเรื่องเกี่ยวกับพวกสองคนปัจจัยหนึ่งคือเรื่องขอบเขตของปล่อยให้เธอได้หายใจอยู่อีตัวเองมี precedence(ขอบเขตเป็นคนหนึ่งยื่นมือไปช่วยขอบเขต/trait B หรือขอบเขตเป็นการเป็นเพื่อวัตถุของประเภทส่วนขยายเพิ่มเติมจากรูปแบบขอบเขตบีของมันเพื่อวัตถุ). อีกแค่พูดถึงเรื่องนั้น ปล่อยให้เธอได้หายใจอยู่อีน คือที่เจาะจงกว่า ปล่อยให้เธอได้หายใจอยู่อี B. ตอนนี้ตอนที่อ่านมันสำหรับครั้งแรกที่ฉันมีหลายที่เป็นไปได้ interpretations อยู่ในจิตใจโดยเฉพาะอย่างยิ่งคิดเห็นค่าพารามิเตอร์(แยกและไม่ใช่)ของที่แยกกำหนดวิธีการและประเภทพารามิเตอร์ ประสบการณ์ดูเหมือนจะสอนผมว่ามันหมายความว่าคนประเภทของกลับคืนค่าโดยปล่อยให้เธอได้หายใจอยู่อีกหลังจากทุกประเภท inference/tapplyเป็นประเภทย่อยของกลับประเภทของปล่อยให้เธอได้หายใจอยู่อีบีดังนั้นนี่คือสบายดี:
class A
class B extends A
implicit val A = new A
implicit val B = new B
implicitly[A]
ทำไมเรื่องนี้ไม่ compile งั้นเหรอ?
implicit class A(val toInt :Int) {
def ! = (1 /: (2 to toInt))(_ * _)
}
implicit class B(i :Int) extends A(i)
1.!
ตอนนี้?
class A(val toInt :Int) {
def ! = (1 /: (2 to toInt))(_ * _)
}
class B(i :Int) extends A(i)
implicit val A = { i :Int => new A(i) }
implicit val B = { i :Int => new B(i) }
1.!
คือมันอีกคดีหนึ่งของคอมไพเลอร์มีวิธีการทำงานที่ลึกลับในตั'?