Cách đối sánh mẫu trong Scala được triển khai ở cấp độ bytecode như thế nào?Cách đối sánh mẫu trong Scala được triển khai ở cấp độ bytecode như thế nào?
Có phải nó giống như một loạt các cấu trúc if (x instanceof Foo)
hoặc thứ gì khác không? Hiệu quả của nó là gì?
Ví dụ: được cung cấp mã sau (từ Scala By Example trang 46-48), mã Java tương đương cho phương thức eval
trông như thế nào?
abstract class Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
def eval(e: Expr): Int = e match {
case Number(x) => x
case Sum(l, r) => eval(l) + eval(r)
}
P.S. Tôi có thể đọc Java bytecode, do đó, một biểu diễn bytecode sẽ đủ tốt cho tôi, nhưng có lẽ nó sẽ tốt hơn cho các độc giả khác để biết nó trông giống như mã Java như thế nào.
P.P.S. Cuốn sách Programming in Scala có trả lời cho câu hỏi này và các câu hỏi tương tự về cách Scala được triển khai không? Tôi đã ra lệnh cho cuốn sách, nhưng nó vẫn chưa đến.
Tại sao bạn không biên dịch ví dụ và tháo rời nó bằng trình tách rời bytecode của Java? – Zifre
Tôi có thể sẽ làm điều đó, trừ khi ai đó đưa ra câu trả lời hay trước. Nhưng bây giờ tôi muốn ngủ một chút. ;) –
Câu hỏi này rất hữu ích cho người đọc khác! – djondal