given/using ใน Scala 3
ไวยากรณ์สมัยใหม่
given/using ใน Scala 3 เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน
ค่าโดยนัยสมัยใหม่ใน Scala 3
Scala 3 แทนที่คีย์เวิร์ด implicit ที่มีหลายหน้าที่ด้วยไวยากรณ์ที่ชัดเจนยิ่งขึ้น: given ใช้กำหนดค่าโดยนัย และ using ใช้ประกาศพารามิเตอร์โดยนัย ทำให้เข้าใจเจตนาได้ง่ายขึ้นมาก
object Main:
given greeting: String = "Hello"
def greet(name: String)(using g: String): String = s"$g, $name!"
def main(args: Array[String]): Unit =
println(greet("Ann"))given แทน implicit val
ใน Scala 2 จะเขียน implicit val x: T = ... ส่วน Scala 3 จะเขียน given x: T = ... ซึ่งเป็นการประกาศค่าที่พร้อมให้ใช้ในการแก้ค่าพารามิเตอร์โดยนัย
object Main:
given factor: Int = 10
def scale(x: Int)(using f: Int): Int = x * f
def main(args: Array[String]): Unit =
println(scale(5))using แทนพารามิเตอร์โดยนัย
ส่วนคำสั่ง using ใช้ทำเครื่องหมายรายการพารามิเตอร์ว่าเป็นโดยนัย คอมไพเลอร์จะเติมค่าจาก given ที่ตรงกันในขอบเขต
object Main:
given unit: String = "kg"
def label(n: Int)(using u: String): String = s"$n$u"
def main(args: Array[String]): Unit =
println(label(75))given แบบไม่ระบุชื่อ
คุณสามารถละชื่อของ given ได้เมื่อไม่จำเป็นต้องอ้างถึงค่านั้นโดยตรง คอมไพเลอร์ยังคงค้นหาค่านั้นตามชนิดได้
object Main:
given Int = 3
def triple(x: Int)(using f: Int): Int = x * f
def main(args: Array[String]): Unit =
println(triple(7))ดึงค่าด้วย summon
summon[T] ของ Scala 3 ใช้แทน implicitly[T] โดยดึงค่า given ชนิด T โดยตรง
object Main:
given name: String = "Scala 3"
def main(args: Array[String]): Unit =
val n = summon[String]
println(n)พารามิเตอร์ using แบบไม่ระบุชื่อ
หากคุณเพียงต้องการส่งต่อพารามิเตอร์ using คุณสามารถไม่ระบุชื่อพารามิเตอร์ในส่วนคำสั่งได้: (using Int) แล้วเรียกใช้ภายในด้วย summon
object Main:
given Int = 100
def boosted(x: Int)(using Int): Int = x + summon[Int]
def main(args: Array[String]): Unit =
println(boosted(5))ใช้ given กับคลาสชนิด
การใช้ given/using ที่เป็นไปตามแนวทางของภาษามากที่สุดคือการใช้กับคลาสชนิด คุณกำหนด trait จัดเตรียมอินสแตนซ์ given และกำหนดให้ต้องใช้ด้วย using
trait Show[A]:
def show(a: A): String
object Main:
given Show[Int] with
def show(a: Int): String = s"Int($a)"
def display[A](a: A)(using s: Show[A]): String = s.show(a)
def main(args: Array[String]): Unit =
println(display(42))ขอบเขตบริบทยังคงใช้ได้
ขอบเขตบริบท [A: Show] ยังคงใช้ได้ และจะถูกแปลงเป็นพารามิเตอร์ using ใช้ร่วมกับ summon เพื่อเข้าถึงอินสแตนซ์
trait Show[A]:
def show(a: A): String
object Main:
given Show[String] with
def show(a: String): String = s"Str($a)"
def display[A: Show](a: A): String = summon[Show[A]].show(a)
def main(args: Array[String]): Unit =
println(display("hi"))การส่งอาร์กิวเมนต์ using อย่างชัดเจน
คุณสามารถระบุพารามิเตอร์ using อย่างชัดเจนด้วยคีย์เวิร์ด using ณ จุดเรียกใช้ เพื่อเขียนทับ given ที่อยู่ในขอบเขต
object Main:
given Int = 10
def scale(x: Int)(using f: Int): Int = x * f
def main(args: Array[String]): Unit =
println(scale(5))
println(scale(5)(using 2))การนำเข้า given
Scala 3 มีไวยากรณ์เฉพาะสำหรับนำเข้า given: import pkg.given หรือ import pkg.{given Show[Int]} ทำให้การนำเข้าค่าโดยนัยชัดเจนและมีเจตนา
object Instances:
given Int = 5
object Main:
import Instances.given
def addBase(x: Int)(using b: Int): Int = x + b
def main(args: Array[String]): Unit =
println(addBase(10))เหตุผลของไวยากรณ์ใหม่
ใน Scala 2 คีย์เวิร์ด implicit เดียวมีความหมายหลายแบบ Scala 3 จึงแยกแนวคิดออกเป็น given = จัดเตรียม และ using = เรียกใช้ โค้ดจึงชัดเจนขึ้นและเข้าใจข้อผิดพลาดได้ง่ายขึ้น
object Main:
given pi: Double = 3.14159
def area(r: Double)(using p: Double): Double = p * r * r
def main(args: Array[String]): Unit =
println(area(2.0))ตรวจสอบอย่างรวดเร็ว
ใน Scala 3 คีย์เวิร์ดใดใช้แทน implicit สำหรับการจัดเตรียมและการเรียกใช้ค่า
สรุปทบทวน
คุณได้เรียนรู้ given/using ของ Scala 3 ดังนี้:
givenจัดเตรียมค่าโดยนัย (แทนimplicit val)usingประกาศพารามิเตอร์โดยนัยsummon[T]แทนimplicitly[T]- given สามารถไม่ระบุชื่อ และเหมาะอย่างยิ่งสำหรับคลาสชนิด
import pkg.givenใช้นำเข้า given อย่างชัดเจน
คำถามที่พบบ่อย
บทเรียน “given/using ใน Scala 3” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “given/using ใน Scala 3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “given/using ใน Scala 3”
ไวยากรณ์สมัยใหม่ คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “given/using ใน Scala 3” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม
ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พารามิเตอร์โดยนัย
- given/using ใน Scala 3
- การแปลงโดยนัย
- เมธอดส่วนขยาย