В C ++ я могу делать следующее:
template
struct{
void operator()(T _1, V _2){
_2.foo( _1 );
}
};
что позволяет мне произвольно решать использовать любой объект, у которого есть метод с именем "foo", который принимает некоторый тип "T "без предварительного указания ни типа аргумента функции" foo ", ни типа возвращаемого значения указанной функции.
Когда я смотрю на Scala, вижу такие черты, как Function1 , и играю с определениями функций вроде
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 )
Я смотрю на себя и думаю, почему я не могу сделать то же самое? Почему "baz" возвращает Any? Разве он не может определить фактический тип возвращаемого значения во время компиляции? Почему я должен объявлять возвращаемый тип «foo», если я могу даже не использовать его?
Я бы хотел иметь возможность делать
def biff[T,V:{def foo( x:T ):Unit}] = //something
или
def boff[T<:{def foo( x:Double ):_}]( y:T ) = y.foo _
Можете ли вы сделать это, и я просто что-то упускаю ? Или, если нет, почему бы и нет?