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