ต้นกำเนิดทางประวัติศาสตร์ของการมีส่วนร่วมของสกาล่า


14

สกาล่าได้รับการขนานนามว่าซับซ้อนด้วยคุณสมบัติที่หลากหลายซึ่งเพื่อนร่วมงานของฉันหลายคนกำหนดและบางคนถึงกับตำหนิคุณลักษณะใหม่ทั้งหมดของมัน ในขณะที่โปรแกรมเมอร์ส่วนใหญ่ทราบถึงคุณลักษณะของ OO และอย่างน้อยคนที่เหมาะสมก็รู้เกี่ยวกับฟังก์ชั่นการเขียนโปรแกรม แต่ก็มีคุณสมบัติหนึ่งอย่างใน Scala ที่ฉันไม่ทราบถึงต้นกำเนิดในอดีต

เนื่องจากมนต์สำคัญของอาชีพของเราคือการไม่เปลี่ยนรูปแบบล้อผมค่อนข้างมั่นใจว่าสกาล่าไม่ได้มีคุณสมบัติที่ไม่เคยได้ยินมาก่อนจริงแต่ฉันยืนที่จะได้รับการแก้ไขในกรณีนี้ถ้าจำเป็น

เพื่อให้ได้คำถามจริงในขณะที่ฉันรับรู้ถึงต้นกำเนิดของคุณสมบัติส่วนใหญ่ของสกาล่าฉันไม่เคยเห็นบางสิ่งที่เหมือนimplicitประกาศของมันมาก่อน มีภาษาอื่น ๆ (รุ่นเก่ากว่า) ที่มีคุณสมบัตินี้หรือไม่?

มันเหมาะสมหรือไม่ที่จะแยกแยะกรณีที่แตกต่างกันของ implicits (ซึ่งอาจมาจากแหล่งที่แตกต่างกัน) คือการแปลงโดยนัยและพารามิเตอร์โดยนัย?


อาจจะซ้ำกันหรือไม่: stackoverflow.com/questions/3069432/…
gerferra

@gerferra ไม่ใช่สิ่งที่ซ้ำกันแน่นอนและไม่มีความคิดเกี่ยวกับเว็บไซต์ข้ามที่ซ้ำกัน หากคุณต้องการคุณสามารถเขียนคำตอบอ้างอิงถึงคำถาม SO และเป็นคำตอบและการอ้างอิงของพวกเขาซึ่งเป็นที่ยอมรับอย่างสมบูรณ์
yannis

คำตอบ:


9

ฉันไม่เห็นด้วยกับคำตอบของ Brian ในคำถามอื่น

เท่าที่ฉันรู้ไม่มีแนวคิดที่ชัดเจนเกี่ยวกับภาษาอื่น ๆ ประวัติการเปลี่ยนแปลงของ Scala นั้นหมายถึง implicits เป็นขอบเขตของมุมมองทั่วไปและขอบเขตการดูคือตัวของมันเองซึ่งเป็นลักษณะทั่วไปของการแปลงชนิดอัตโนมัติซึ่งเป็นเรื่องธรรมดามาก

นัยแล้วเปิดใช้งานคลาสประเภท แต่ฉันจะประหลาดใจมากถ้านั่นเป็นความตั้งใจเดิม

แก้ไข

บันทึกประจำรุ่นสำหรับ Scala 2.0 (2006) กล่าวว่า:

มุมมองใน Scala 1.0 ถูกแทนที่ด้วยแนวคิดทั่วไปของพารามิเตอร์โดยนัย

แต่นั่นไม่ได้หมายความว่ามีการแนะนำพารามิเตอร์โดยนัยโดยมีเป้าหมายในการแทนที่มุมมอง

อย่างไรก็ตาม Odersky ชอบมันอย่างชัดเจนเมื่อแนวคิดสามารถแทนที่ได้หลายรายการ ในแง่นั้นมันอาจเป็นกรณีที่ Odersky ต้องการคลาสพิมพ์ แต่ไม่ต้องการแนะนำกลไกในการจัดการเฉพาะและดังนั้นจึงเกิดขึ้นกับสิ่งอื่นที่ทำให้เขาลบแนวคิดหนึ่ง (Views) และแทนที่มัน ด้วยแนวคิดทั่วไปที่จัดการทั้งมุมมองและคลาสประเภท

ในกรณีที่ใครสนใจคลาสของประเภทคนจนที่อ้างถึงโดย Brian Back ที่ Stack Overflow ก็คือวันที่ปี 2549 เช่นกัน เห็นได้ชัดว่า Odersky ตระหนักถึงความเชื่อมโยงระหว่าง implicits และคลาสของประเภทเมื่อเขาแนะนำพวกเขา

ถึงกระนั้นฉันยังยืนตามการเรียกร้องของฉัน :-)


การตอบสนองของนอร์แมนแรมซีย์เป็นอย่างไร? stackoverflow.com/a/3071461/63489 มันหมายถึงการดำเนินการก่อนหน้านี้ของการแปลงโดยนัยใน Haskell
gerferra

@gerferra ฟังดูสมเหตุสมผล - โปรดทราบว่า Odersky มีการอ้างถึงในกระดาษนั้น กลไกต่างกัน แต่อาจมีลูกกลิ้ง บทความที่อ้างถึงของ Odersky กล่าวถึงชั้นเรียนประเภทและมีการแนะนำนัยในปี 2549 วันที่นำเสนอ "ประเภทชั้นเรียนของคนจน" อ้างถึงโดย Brian - ชัดเจนมีลิงค์ ยังคงปล่อยบันทึกสำหรับ Scala 2.0 (2006) กล่าวว่า"มุมมองใน Scala 1.0 ได้ถูกแทนที่ด้วยแนวคิดทั่วไปพารามิเตอร์โดยปริยาย" จากสิ่งที่ฉันรู้เกี่ยวกับ Odersky กลไกหนึ่งที่สามารถแก้ไขปัญหาหลายอย่างจะดึงดูดเขาอย่างมาก
Daniel C. Sobral

ยุติธรรมเพียงพอ :-)
gerferra

4

Implicit ในสกาล่าหมายถึงสองสิ่งที่แตกต่างกัน

  1. พารามิเตอร์โดยปริยาย สิ่งเหล่านี้ปรากฏใน Haskell และอาจเป็นภาษาอื่นก่อน หลักฐานประกอบ: กระดาษจากปี 2000 นี้และGHC เอกสาร 5.04.1 (Sept-2002 ก่อนที่จะมีเป็น Scala)
  2. การแปลงโดยนัย ฉันไม่รู้ภาษาแรกที่จะมีสิ่งเหล่านี้ แต่พวกเขาอยู่ใน C # 1.0 (โดยใช้implictคำหลัก) ซึ่งก่อนวันที่รุ่นแรกของ Scala ประมาณหนึ่งปี

+1 ฉันไม่ทราบว่ามีการแปลงโดยนัยใน C # ขอบคุณสำหรับตัวชี้
Frank

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.