В C++ можно сделать следующее:Возможно ли кодировать типичные типы возвращаемых данных в Scala, аналогичные шаблонам C++?
template<typename T, typename V>
struct{
void operator()(T _1, V _2){
_2.foo(_1);
}
};
, который позволяет мне произвольно решили использовать любой объект, который имеет какой-то метод, называемый «Foo», которая принимает некоторый тип «Т» без указания заранее либо типа аргумента «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 _
Вы можете сделать это, и я просто что-то отсутствует? Или если нет, почему бы и нет?
Я не понимаю пример 'biff'. Есть ли отсутствующий аргумент? –
@Aaron Novstrup нет недостающих аргументов. Я получаю сообщение об ошибке, когда я так утверждаю. Говорит, что я не могу определить «V» так, что это зависит от «T». – wheaties