为什么scala方法不接受泛型?

时间:2018-02-12 22:20:38

标签: scala generics

我有以下两种方法:

def callAlpha = call[T](Constants.Alpha)(_: String)(_: T => T)

def call[T](symbol: String)(caller: String)(op: T => T)(implicit ct: ClassTag[T]): String = { // some code }

Eclipse抱怨在第一种方法中使用泛型,但在第二种方法中却没有。这是为什么?

2 个答案:

答案 0 :(得分:3)

在第二种方法中,您包含一个类型参数定义([T],它紧跟在方法名称之后)。这声明了一个名为T的类型参数(您可以根据需要对其进行命名),然后可以在方法的输入参数,输出类型和实现中使用它。

第一种方法缺少此定义 - 它尝试使用名为T的类型而不声明这样的类型:方法名称(callAlpha)后面没有类似的类型参数定义,因此方法主体call[T](Constants.Alpha)(_: String)(_: T -> T))无法使用它。

修复可以很简单 - 也为第一种方法定义T

def callAlpha[T] = call[T](Constants.Alpha)(_: String)(_: T => T)

答案 1 :(得分:2)

因为在

def callAlpha = call[T](Constants.Alpha)(_: String)(_: T => T)

右侧有一个未绑定的类型变量T

你可能意味着:

def callAlpha[T] = call(Constants.Alpha)(_: String)(_: T => T)