val (xa, xb) = xs partition ( a > )
Run Code Online (Sandbox Code Playgroud)
什么是a >在上面的代码和它是如何从不同a > _?(假设a是一些预定义的值)
Rex*_*err 11
任何期望具有某个参数的函数的方法都可以改为传递单参数方法,如果类型解析,则该方法将自动转换.
所以这些都是有效的:
class C { def go(i: Int) = -i }
val c = new C
List(1,2,3).foreach( println )
List(1,2,3).map( c go )
Run Code Online (Sandbox Code Playgroud)
因此,要么定义a了方法,要么可以使用方法>隐式转换为某些>方法.例如,这有效:
List(1,2,3).partition(2 >)
Run Code Online (Sandbox Code Playgroud)
因为(编辑:人会想到这会是真的......)有一个从隐式转换Int到RichInt(同一个,让你.toFloat和这样的),并RichInt有一个>定义的方法. partition期望一个获取Int和返回的函数,Boolean并且2 >是一个获取Int和返回的方法Boolean.因此转换会自动发生.
(编辑:但正如@Lukas Rytz指出的那样,它比这更棘手,因为编译器意识到它可以特别处理原始的int,所以即使>它不是对象的真正方法2,因为2它不是一个对象,而且是原语没有方法,编译器认识到延迟RichInt会更慢.所以,事实上,它只是用正确的字节码编写一个方法.)
只有在没有自动发生正确转换的情况下(例如,由于模糊,或者因为您想将其分配给变量),您才需要使用_从方法中创建函数.(然后并不总是很清楚你是否使用_从方法转换为函数,或者_用作输入的占位符;幸运的是,结果是相同的.)
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |