是否有可能在Scala中表达kotlin’with’方法?
发布时间:2020-12-16 18:42:08 所属栏目:安全 来源:网络整理
导读:Kotlin Standard lib包含接收对象的 ‘with’ method和该对象的方法,定义如下: public inline fun T,R with(receiver: T,block: T.() - R): R = receiver.block() 并可用作: val str = "string"with(str) { println(size)) // will print 6; equals to "st
Kotlin Standard lib包含接收对象的
‘with’ method和该对象的方法,定义如下:
public inline fun <T,R> with(receiver: T,block: T.() -> R): R = receiver.block() 并可用作: 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) } 如何在Scala中定义类似的方法? 解决方法
在Scala中无法定义这样的方法,因为Scala中不存在
function literals with receiver的概念.
但是,Scala的导入足够通用,您可以使用它而不是使用它.您的示例将写为: val str = "string" import str._ println(length) println(substring(3)) 请注意,大小特别适用于此方案,因为它恰好隐藏在String上,所以我不得不使用长度.但是,一般来说,这是我们使用的模式. 注释后编辑:如果要将导入显式限定为代码的一部分,则可以使用大括号来执行此操作,大括号始终允许使用大小写: val str = "string" { import str._ println(length) println(substring(3)) } println(length) // does not compile 请注意,空白行是必需的,否则它将被解析为尝试使用{…}作为参数调用“string”上的apply方法.要避免此问题,可以使用本地方法: val str = "string" locally { import str._ println(length) println(substring(3)) } println(length) // does not compile 本地人本身没有做任何事情;它仅用于在视觉上突出显示大括号仅用于确定范围,并通过扩展来帮助解析做正确的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |