En C++ que puede hacer lo siguiente:Posible codificar tipos de devolución genéricos en Scala similares a las plantillas C++?
template<typename T, typename V>
struct{
void operator()(T _1, V _2){
_2.foo(_1);
}
};
que me permite arbitrariamente decido usar cualquier objeto que tiene un método llamado "foo" que tiene algún tipo de "T", sin especificar de antemano o bien el tipo de argumento de la función "foo" ni el tipo de retorno de dicha función.
Cuando miro Scala, ver rasgos como Function1, y estoy jugando con las definiciones de funciones como
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)
Me miro y pienso por qué no puedo hacer lo mismo? ¿Por qué "baz" devuelve un Any? ¿No puede deducir el tipo de devolución real en el momento de la compilación? ¿Por qué tengo que declarar el tipo de devolución de "foo" si ni siquiera puedo usarlo?
me gustaría ser capaz de hacer
def biff[T,V:{def foo(x:T):Unit}] = //something
o
def boff[T<:{def foo(x:Double):_}](y:T) = y.foo _
Se puede hacer esto y solo estoy perdiendo algo? O si no, ¿por qué no?
No tengo claro el ejemplo de 'biff'. ¿Hay un argumento perdido? –
@Aaron Novstrup no falta ningún argumento. Me aparece un error cuando lo digo así. Dice que no puedo definir "V" de modo que dependa de "T". – wheaties