ped*_*o91 6 scala higher-order-functions kotlin
Kotlin Standard lib包含接收对象的'with'方法和该对象的方法,定义如下:
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
Run Code Online (Sandbox Code Playgroud)
并可用作:
val str = "string"
with(str) {
println(size)) // will print 6; equals to "string".size
println(substring(3)) // will print (ing); equals to "string".substring(3)
}
Run Code Online (Sandbox Code Playgroud)
如何在Scala中定义类似的方法?
sjr*_*jrd 11
在Scala中无法定义这样的方法,因为Scala 中不存在带接收器的函数文字的概念.
然而,Scala的import是通用的,以至于你可以用它来代替的with.您的示例将写为:
val str = "string"
import str._
println(length)
println(substring(3))
Run Code Online (Sandbox Code Playgroud)
请注意,size具体不适用于此方案,因为它恰好是隐式拉皮条String,所以我不得不使用length.但是,一般来说,这是我们使用的模式.
注释后编辑:如果要将导入显式限定为代码的一部分,则可以使用大括号来执行此操作,大括号始终允许使用大小写:
val str = "string"
{
import str._
println(length)
println(substring(3))
}
println(length) // does not compile
Run Code Online (Sandbox Code Playgroud)
请注意,空行是必需的,否则它将被解析为尝试使用as参数调用apply方法.要避免此问题,您可以使用以下方法:"string"{...}locally
val str = "string"
locally {
import str._
println(length)
println(substring(3))
}
println(length) // does not compile
Run Code Online (Sandbox Code Playgroud)
locally本身没有做任何事情; 它仅用于在视觉上突出显示大括号仅用于确定范围,并通过扩展来帮助解析做正确的事情.
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |