with
和run
是否具有相同的功能,只是语法不同,或者with
和run
之间是否存在重大差异?
哪一种是正确的方法?
adapter.run {
notifyDataSetChanged()
if (activityDetails.isEmpty())
emptyText.visibility = View.VISIBLE
else
emptyText.visibility = View.GONE
}
with(adapter){
notifyDataSetChanged()
if (activityDetails.isEmpty())
emptyText.visibility = View.VISIBLE
else
emptyText.visibility = View.GONE
}
在正常情况下,它们非常相似,但是对于一个可为空的变量,最好使用T. run()
例如,如果webview.settings
为空,下面将显示不同的
with(webview.settings) {
this?.javaScriptEnabled = true
this?.databaseEnabled = true
}
// similarly
webview.settings?.run {
javaScriptEnabled = true
databaseEnabled = true
}
它们只有语法上的区别,run
是一个扩展函数,而with
不是。以下是定义(在kotlin sdlib:1.0.3
中):
public inline fun <T, R> T.run(block: T.() -> R): R = block() // equivalent to this.block()
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
由于run
是一个扩展函数,它还有一个类型为T
的隐式参数,因此参数类型相同。职能机构实际上也是相同的。
它们的性能也应该是等价的,因为两者都是内联函数:生成的字节码应该只包含内联的块正文。
函数使用上的差异都是由于run
是一个扩展。
首先,run
适用于调用链接:
foo.run { bar }.run { baz }
其次,更重要的是,如果声明的变量类型具有具有相同签名的run
函数,则将调用它而不是扩展名。而run
可以被另一个扩展隐藏。这就是扩展的解析方式。例子:
class MyClass {
fun <R> run(blockIgnored: MyClass.() -> R): Nothing = throw RuntimeException()
}
"abcdefg".run { println("x") } // prints "x"
MyClass().run { println("x") } // throws RuntimeException
(MyClass() as Any).run { println("x") } // prints "x"
我在Grizzly服务器上为Jersey应用程序运行以下简单示例: 当我从IntelliJ运行它时,一切都按照预期工作。 已连接到目标VM,地址:“127.0.0.1:61163”,传输:“Socket”2016年12月30日4:00:07PM com.sun.jersey.api.core.PackagesResourceConfig init信息:在包中扫描根资源和提供程序类:Applicat
我想了解这两种说法在更深层次上的区别是什么。 即使我能够从其他类中访问这些变量,并且对我来说两者的工作方式相同,但是< code>get()又有什么不同呢?
https://i.stack.imgur.com/tE6Rq.png 我是科特林的新手。这是我的第一个项目,我有问题。我不知道现在该怎么办。如果有人能解决这个问题,对我真的很有帮助。提前谢谢。请看附件中的照片
我不想在这里使用maven或gradle。我知道gradle可以帮我解决依赖关系。我只想要一个普通的香草Kotlin你好世界项目。文档中有一个“IntelliJ理念入门”部分,其中只提到了IntelliJ的Kotlin插件。似乎没有安装gradle或maven的要求,插件应该可以做到这一点。我知道您可以使用手动安装SDK,但文档是错误的,并且仅此插件无法在之前手动安装SDK或使用Maven/Gra
我对Kotlin中的两个函数和感到非常困惑,有人能给我一个具体的例子来区分这两个函数吗?
我有这个命令来编译我的程序。 我创建了以下makefile。 如果从terminal运行该命令将成功,但make将失败。 它将失败,并出现错误 该文件应该在命令中使用导入。 我认为Makefile中的命令执行起来很像bash脚本。 在bash中运行命令和在Makefile中运行命令有什么区别?