Tôi đang viết trình tạo mã tạo đầu ra Scala.Làm thế nào để xác định toán tử bậc ba trong Scala giữ lại mã thông báo hàng đầu?
Tôi cần mô phỏng toán tử bậc ba theo cách mà các thẻ dẫn đến '?' vẫn còn nguyên vẹn.
ví dụ: chuyển đổi biểu thức c ? p : q
thành c something
. Đơn giản if(c) p else q
không đạt tiêu chí của tôi, vì nó yêu cầu đặt if(
trước c
.
nỗ lực đầu tiên của tôi (vẫn còn sử dụng c/p/q như trên) được
c match { case(true) => p; case _ => q }
một lựa chọn Tôi tìm thấy là:
class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) } implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)
cho phép tôi viết:
c |: { b: Boolean => if(b) p else q }
Tôi thích giao diện tổng thể của tùy chọn thứ hai, nhưng có cách nào làm cho nó ít tiết hơn không?
Cảm ơn
ví dụ: một cái gì đó bằng cách sử dụng '_' thay cho b: Boolean sẽ được tốt đẹp, nhưng tôi không thể có được bất cứ điều gì để làm việc ngay –
Xem 'BooleanW #?' từ Scalaz: http://scalaz.googlecode.com/svn/continuous/latest /browse.sxr/scalaz/BooleanW.scala.html – retronym