Trong C++ tôi có thể làm như sau:Có thể mã hóa các kiểu trả về chung trong Scala tương tự như các mẫu C++?
template<typename T, typename V>
struct{
void operator()(T _1, V _2){
_2.foo(_1);
}
};
cho phép tôi tùy tiện quyết định sử dụng bất kỳ đối tượng trong đó có một số phương pháp được gọi là "foo" mà sẽ đưa một số loại "T" mà không chỉ định trước hoặc là kiểu lập luận của hàm "foo" cũng như kiểu trả về của hàm đã nói.
Khi tôi nhìn vào Scala, thấy những đặc điểm như Function1, và đang chơi xung quanh với các định nghĩa hàm như
def foo[T<:{def foo():Unit}](arg:T) = //something
def bar(x:{def foo():Unit}) = //something
def baz[T,V<:Function1[T,_]](x:T, y:V) = y(x)
tôi nhìn vào bản thân mình và nghĩ rằng tại sao tôi không thể làm điều tương tự? Tại sao "baz" trả lại một cái gì? Nó không thể suy ra kiểu trả về thực tế tại thời gian biên dịch? Tại sao tôi phải khai báo kiểu trả về của "foo" nếu tôi thậm chí không thể sử dụng nó?
Tôi muốn để có thể làm
def biff[T,V:{def foo(x:T):Unit}] = //something
hoặc
def boff[T<:{def foo(x:Double):_}](y:T) = y.foo _
Bạn có thể làm điều này và tôi chỉ còn thiếu một cái gì đó? Hoặc nếu không, tại sao không?
Tôi không rõ ràng về ví dụ 'biff'. Có một đối số còn thiếu? –
@Aaron Novstrup không thiếu đối số. Tôi nhận được một lỗi khi tôi tuyên bố nó như thế. Nói tôi không thể định nghĩa "V" sao cho nó phụ thuộc vào "T." – wheaties