在Kotlin中,如果对象(let
receiver)不是null
,通常使用let
执行代码,作为if!=空
检查,如下所示:
val nullable: String? = "anything"
nullable?.let {
println(it)
}
在其他哪些情况下,使用let
有意义?
仅供参考,let
是Kotlin的stdlib的一部分,定义如下:
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
stdlib函数let
使您能够将变量的作用域限制为特定的代码块。这里显示:
compile("a:b:c")
"io.vertx:vertx".let { v->
compile("$v-lang-kotlin:$vertxVersion")
compile("$v-lang-kotlin-coroutines:$vertxVersion")
}
compile("x:y:z")
我们也可以定义一个val v:String=“io.vertx:vertx”
,这可能会使代码更可读,因为这就是我们在Java中所做的。然而,在整个方法中,val
是可以访问的。我们只想让它对涉及vertx的编译
单元可用,因此我们将变量限制在io中。vertx:vertx
到let
块。
关于不同范围函数备选方案的信息可以在这个线程中找到。
let
在处理可为空的var
变量时也很有用。例如,我们有这个代码
fun doSomething(value: String) {
}
class A {
var boo: String? = null
fun b() {
if (boo != null) {
doSomething(boo)
}
}
}
在那里,我们在if
块内部有编译时错误,因为bos
可以在外部更改。要解决这个问题,我们要么创建一个val
变量
class A {
var boo: String? = null
fun b() {
val b = boo
if (b != null) {
doSomething(b)
}
}
}
或者使用let
class A {
var boo: String? = null
fun b() {
boo?.let {
doSomething(it)
}
}
}
我见过let
用于限定嵌套变量的范围(忽略let
的返回):
some.nested.foo.bar.let { bar ->
doSomething(bar)
doMoreStuff(bar)
}
它可以很好,因为它取代了定义局部变量的需要,但我不确定它到底有多有用。
也可以使用apply
,尽管可读性稍差,(this
而不是范围中的bar
)。
我知道Elasticsearch支持带bucketing的子聚合(其中bucketing聚合可以有bucketing或metric子聚合)。使用度量聚合无法进行子聚合。也许这是有道理的,但这里是用例。 作为家长,我有术语聚合。并将另一个术语聚合作为它的子项。子术语具有类型为top\u hits的子聚合
问题内容: 我写了一个程序,可以总结如下: 实际代码(尤其是)要复杂得多。仅使用将其当作参数的这些值(意味着它不引用) 基本上,它将巨大的数据集加载到内存中并进行处理。输出的写操作委托给一个子进程(它实际上写到多个文件中,这需要很多时间)。因此,每次处理一个数据项时,它都会通过res_queue发送到子流程,然后该子流程根据需要将结果写入文件中。 子流程不需要访问,读取或修改以任何方式加载的数据。
问题内容: 我试图在pySpark的一行代码中进行多项操作,但不确定我的情况是否可行。 我的意图是不必将输出另存为新的数据框。 我当前的代码非常简单: 我的意图是在使用后添加,以得到与每个 列值匹配的记录计数,这些记录打印\显示为输出。 尝试使用时,出现异常。 有什么方法可以同时实现和 .show()打印,而无需将代码拆分为两行命令,例如: 或更好的办法是将合并的输出输出到-额外的一栏,用于说明与
问题内容: 我有大量的名称-值对(大约100k),我需要将它们存储在某种高速缓存(例如哈希映射)中,其中值是一个平均大小约为30k字节的字符串。 现在我知道一个事实,大量的值具有完全相同的字符串数据。为了避免多次分配相同的字符串数据,我想以某种方式重用以前分配的字符串,从而减少内存消耗。另外,这需要相当快。即,不能一一扫描所有先前分配的值。 关于如何解决此问题的任何建议? 问题答案: 千万 不能
我试图使用来生成。出于某种原因,我无法重现我使用创建的,该代码可以毫无问题地运行。 下面是我的调用成功并返回200:
【AssetBundle使用】页面展示具体的AssetBundle文件使用情况,主要包括以下几个方面: AssetBundle所包含的具体内容 “总AB数” 表示该次资源检测过程中,UWA所检测到的AssetBundle文件总量。点击 “总AB数”,即可查看具体每个被检测的AssetBundle文件,及其所包含的具体资源。 上图表格中的每一行,我们均展示了每种资源的具体使用数量。您可以对任一资源种