我试图在Scala中实现布尔类型,我找到了一个使用此签名的示例:
abstract class Boolean {
def ifThenElse[T](t : => T , e : => T) : T
... }
我的问题是:
我们应该在函数名之后使用类型参数,例如这个funcName [T]。
t:=>是什么意思?
谢谢
答案 0 :(得分:2)
至于第一个问题:
1.我们应该在函数名之后使用类型参数,如funcName [T]
如果你想要这个函数可以使用不同的类型,那么将函数名称后面的泛型类型设置为funcName[T]
是很明智的。例如,你有一个像这样的函数
def myFunction[T](param1: T){/*process*/}
您希望将参数param1
和param2
传递给myFunction
。这两个参数定义如下
val param1: Int = 10
val param2: String = "test"
虽然param1
和param2
的类型不同,但您可以调用函数myFunction(param1)
和myFunction(param2)
然后,让我们谈谈第二个问题
2.T:=> T是什么意思?
这是一个by-name parameter
。那是什么?以下为您提供更多详细信息:
t: => T
与t: () => T
的含义相同,而不是输入() => T
字样,您可以选择=> T
作为t
另一个例子:如果你想要一个断言,你可以定义这样的函数:
def myAssert(predicate: () => Boolean) =
if(!predicate()) throw new AssertionError
然后您可以将其用作以下
myAssert(() => 5 > 3)
用法太难看了,是吗?您可能希望像这样使用它
myAssert(5 > 3)
此时,by-name parameter
将在舞台上。只需在by-name parameter
def myAssert(predicate: => Boolean) = //leave out '()'
if(!predicate) throw new AssertionError //leave out '()'
然后,您可以使用上面的myAssert
myAssert(5 > 3)
注释:只允许参数使用名称类型,其中省略了空参数列表()。没有名字变量或副名字段。
祝你好运。