อะไรกันที่'คือที่เจาะจงกว่า'หมายถึงในคอนเท็กซ์ของ implicits?

0

คำถาม

ดังนั้น,ที่แยกกำหนด 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.!

คือมันอีกคดีหนึ่งของคอมไพเลอร์มีวิธีการทำงานที่ลึกลับในตั'?

implicit implicit-conversion scala
2021-11-14 19:33:24
1

คำตอบที่ดีที่สุด

2

ดูจาก จิบ-13-คลาสที่แยกกำหนด ข้อเสนอของคุณปล่อยให้เธอได้หายใจอยู่อี:

implicit class A(val toInt :Int) {
    def ! = (1 /: (2 to toInt))(_ * _)
}

จะเปลี่ยนไปอย่าง:

class A(toInt: Int) {
 ...
}
implicit final def A(toInt: Int): A = new A(toInt);

และของคุณ B ในของมันเปลี่ยนจะเปลี่ยนไปอย่าง:

class B(i: Int) extends A(i) {
 ...
}
implicit final def B(i: Int): B = new B(i);

ดังนั้นคุณก็ประกาศว่า 2 ที่แยกกำหนดการแปลงวิธีการเดียวกับพารามิเตอร์ซึ่งเป็นยังกำกวมเนื่องจา. ตอนสุดท้ายหนึ่งไม่ยังกำกวมเนื่องจาเนื่องจากไปแล้วพูดถึง"ส่วนระบุ"กฎสำหรับที่แยกกำหนด ค่าพารามิเตอร์ ความละเอียด.

2021-11-14 20:25:04

ฉันกลัวว่าฉันไม่เข้าใจว่าทำไมคนสุดท้ายไม่ใช่ยังกำกวมเนื่องจา. เป็นที่แยกกำหนดวิธีการเป็น reified ต้องการแยกฟังก์ชัน(อยู่ใน Language 2)ดังนั้นผมไม่เห็นอยู่ที่ไหนกันแน่ความแตกต่างโกหก semantically. แล้วถ้าฉันเอาคลาสที่แยกกำหนด declarations อยู่แยกออก contexts แต่แล้วพวกเขานำเข้า(ดังนั้นพวกเขาเป็น borh identifiers ที่มีอยู่ในท้องถิ่น syntactical คอนเท็กซ์โดยไม่มี prefixing)ที่ล้มเหลวอย่างเช่นทำงาน: stackoverflow.com/questions/69966645/...
Turin

@Italyprovince. kgm "ฉันเกรงว่าฉันไม่เข้าใจว่าทำไมคนสุดท้ายไม่ใช่ยังกำกวมเนื่องจา." -มันเป็นตามกฎของคุณต้องพูดถึงอยู่ในคำถาม(ความละเอียดของที่แยกกำหนดค่าพารามิเตอร์). และครั้งแรกหนึ่งเป็นที่คล้ายคลึงกันต้องการเลือกวิธีการโอเวอร์โหลดจากพารามิเตอร์ประเภท. ยังเจอคำตอบที่ นี้ คำถามของคุณ workaround คือพูดถึงที่นั่น..
Guru Stron

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................