Tôi đang làm theo hướng dẫn Pattern matching & functional composition trên các phương thức Scala compose
và andThen
. Có một ví dụ như vậy:Soạn và vàSau đó phương pháp
scala> def addUmm(x: String) = x + " umm"
scala> def addAhem(x: String) = x + " ahem"
val ummThenAhem = addAhem(_).compose(addUmm(_))
Khi tôi cố gắng sử dụng nó, tôi nhận được một lỗi:
<console>:7: error: missing parameter type for expanded function ((x$1) => addAhem(x$1).compose(((x$2) => addUmm(x$2))))
val ummThenAhem = addAhem(_).compose(addUmm(_))
^
<console>:7: error: missing parameter type for expanded function ((x$2) => addUmm(x$2))
val ummThenAhem = addAhem(_).compose(addUmm(_))
^
<console>:7: error: type mismatch;
found : java.lang.String
required: Int
val ummThenAhem = addAhem(_).compose(addUmm(_))
Tuy nhiên, hoạt động này:
val ummThenAhem = addAhem _ compose addUmm _
hoặc thậm chí
val ummThenAhem = addAhem _ compose addUmm
Có gì sai với mã trong hướng dẫn? Không phải biểu thức thứ hai giống như biểu thức đầu tiên không có dấu ngoặc đơn?
Vì tính đầy đủ của, ví dụ andThen trông giống như:.. 'val ahemThenUmm = addAhem (_) andThen (addUmm (_)) ' khi nó sẽ giống như ' val ahemThenUmm1 = (addAhem _) andThen (addUmm) ' –
Tôi không chắc chắn về phần được viết trong dấu ngoặc tròn; trình biên dịch * không * chuyển đổi phương thức thành chức năng tự động, ít nhất là đối với Scala 2.10.2. Cách giải quyết khác là khai báo 'addAhem' và' addUmm' làm các hàm để 'compose' hoặc' vàThen' hoạt động mà không có '_'. –