Tôi mới sử dụng Scala (Phiên bản runner mã Scala 2.7.7.final), và tôi thực sự không hiểu tại sao nó yêu cầu người gọi để cung cấp kiểu tham số khi chúng ta đang sử dụng các hàm bậc cao.Giá trị chức năng chung (Lỗi)
Trong ví dụ bên dưới, tôi có một đối tượng độc lập (Util
) có một hàm. Nhưng trong khối Main
, người gọi phải chuyển kiểu tham số cho hàm ẩn danh.
Tại sao Scala không phỏng đoán loại chức năng từ loại Array
(tức là String
)? Có cách nào để làm điều đó ?
object Util {
// Just for fun! Suppose that the arrayOne and arrayTwo are all the same length.
// will swap the elements from arrayOne to ArrayTwo.
def swap[T](arrayOne:Array[T], arrayTwo:Array[T] , f:(T,T) =>(T,T)) {
for(i <- 0 until (arrayOne.length min arrayTwo.length)){
val (left, right) = f(arrayOne(i),arrayTwo(i))
arrayOne(i) = left
arrayTwo(i) = right
}
}
}
object Main extends Application {
val arrayOne = Array("A","B","C")
val arrayTwo = Array("D","E","F")
//If not specified the type String,the compiler throws "Missing Parameter Type" error
Util swap(arrayOne, arrayTwo,(elem1:String,elem2:String)=>(elem2,elem1))
}
Chỉ hoạt động đối với tôi a} trong đối tượng Util. –
@Thomas nó hoạt động vì ông đã chỉ định loại trong hàm. :-) –
@Daniel Chú thích loại là điều cuối cùng làm phiền tôi với mã này. Tôi tự hỏi nếu nó sẽ là thô lỗ để sửa chữa nó. Mất sự chú ý xuống dòng cuối cùng. –