我想写一个泛型函数,它将返回它的两个参数的总和,如下所示:
func add<T: ???>(left: T, right: T) -> T {
return left+right
}
Run Code Online (Sandbox Code Playgroud)
当然,为了使用+运算符,T类型需要符合定义+运算符的协议.
在其他几家运营商的情况下,有建于协议-例如Equatable为==,并Comparable为<,>等这些协议是由所有斯威夫特内置的"算术"类型,如双,浮法,Int16的采用等
是否有一个标准协议,定义+,-,*,/运营商,这是由ALL"算术"类型,如双,浮动,中等,UINT,Int16类型等通过?
有人可以解释一下,为什么这两个 lambda都可以用这里的方法引用替换?
在RxJava中,map()接受一个类型的参数Func1<T, R>,其注释声明它"表示具有一个参数的函数".因此我完全理解为什么valueOf(Object)在这里工作.但trim()需要任何参数都没有.
那么这是如何工作的呢?
Observable.just("")
.map(s -> String.valueOf(s)) //lambdas
.map(s -> s.trim()) //
.map(String::valueOf) //method references
.map(String::trim) //
.subscribe();
Run Code Online (Sandbox Code Playgroud)