Tôi có một đoạn mã mà tôi không thể xử lý theo cách mình muốn. Tôi có một lớp được định nghĩa theo cách sau (rút gọn cho việc này):Nhiều loại đối số đóng tham số không được suy ra
class Behaviour[T](private val rule: Time => T) {
def map1[U, V](behaviour: Behaviour[U], func: (T, U) => V): Behaviour[V] = {
new Behaviour(time => func(this.at(time), behaviour.at(time)))
}
}
Khi chơi xung quanh với lớp học này tôi đã cố gắng một cái gì đó mà tôi nghĩ sẽ là tầm thường:
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
Đối với người cuối cùng dòng Tôi nhận được lỗi sau:
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
Tôi có thể chỉ định loại tham số đóng và hoạt động chính xác nhưng tại sao không gõ suy luận ở đây? Tất nhiên tôi cũng có thể chỉ định các loại chung cho hàm (xem bên dưới cho cả hai giải pháp).
Tôi nghĩ Scala đã thực hiện 'quét' để suy ra các loại và sẽ thấy beh2
và được chuyển vào hàm và giả định U
ở đây là Int
. Có cách nào tôi có thể sửa lỗi này mà không xác định các loại tham số đầu vào (cho đóng cửa hoặc generics)?
EDIT: Ví dụ về hai bản vá Tôi có:
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)
Cảm ơn rất nhiều công trình tốt! Tôi sẽ chấp nhận câu trả lời nếu không ai có thể đi kèm với một lời giải thích cho những gì đang xảy ra trong ngày hôm sau. – seadowg