Tag: 拉姆达

是否有可能从lambda的闭包隐藏变量?

我试图在Kotlin中创建类型安全的Groovy风格的构建器,就像这里所描述的那样。 问题是嵌套lambda中lambda接收器的可见性。 这是一个简单的例子。 html { head(id = "head1") body() { head(id = "head2") } } 嵌套lambda的Receiver是没有“head”方法的Body。 不过这个代码编译打印成这样: <html> <head id="head1"></head> <head id="head2"></head> <body></body> </html> 这是预料,但有没有办法让内心的编译错误?

kotlin如何在多层应用函数中引用outer-scope这个

例如: v1?.apply { v2?.apply { call(this, target, outerThis); } } 我的问题是如何参考“outerThis”? 感谢您的帮助。

如何在kotlin中重载构造函数在lambda返回类型中有所不同

我有两个不同的lambda返回类型的构造函数。 有什么选择如何超载他们? 我试图使用JvmOverloads注释,但它没有工作。 constructor(db : Database, handler: ( transaction: Transaction) -> Unit) : this(db, Handler<Transaction>( {handler.invoke(it)})) @JvmOverloads constructor(db : Database, handler: ( transaction: Transaction) -> Any) : this(db, Handler<Transaction>( {handler.invoke(it)}))

Kotlin:比较不同目标对象的属性值和(外)反射

我想比较数据类的多个实例之间的值,以便我知道哪个值更改: data class A(val name : String) val firstA = A("hello") val secondA = A("you") if (secondA.name.changed(firstA)) { // Do something } 我可以以某种方式访问.name的属性函数,并在没有明确定义的情况下在另一个目标值(在本例中为firstA)上执行它? 可以在这里委托帮助,或者如何解决这个问题,而不是反思?

Kotlin任何与lambdas

虽然提供这个问题的代码是相当微不足道的,但问题集中在类型安全的更一般的方面: 让我们有这样一个lambda函数: {it: (Any) -> Any -> it(it)} 它需要另一个lambda并将其自身作为参数执行。 所以让我们做一些明显的事情,并将其作为参数调用: {it: (Any) -> Any -> it(it)}.apply { this.invoke(this) } 但是,这并不如我想的那样工作:在编译时出现以下错误: 类型不匹配:推断的类型是((任何) – >任何) – >任何,但(任何) – >任何预期 好。 所以我们来试试这个: val lambda: (Any) -> Any = { Unit } 这个属性的实际值并不重要,我对结果不感兴趣,只是在编译器的行为。 所以这是另一个属性: val kappa: (Any) -> Any = lambda 好的,现在这实际上编译。 但是和以前不一样吗? 我传递一个(Any) -> Any函数的属性(在另一种情况下,它是一个参数),期望(Any) -> Any函数。 逻辑告诉我:是的, […]

我可以转换模板表达式中的字符串还是kotlin中的lambda表达式?

我可以转换模板表达式中的字符串还是kotlin中的lambda表达式? val tm = "x = $"+"x" val fn: (x: String) -> String = { it -> tm} val str = fn("This is X!!!") 需要得到 x =这是X! 为什么?:您可以接收模板,例如,从数据库PS:或您的建议

Kotlin:什么是用于lambda参数的名字?

在Kotlin中,可以在其定义中给出lambda参数名称。 fun example(lambda: (a: Int, b: Int) -> Int) 正如你所看到的, a和b是在lambda中命名的。 我认为这可能是一个IDE的真正有用的信息,生成填充参数名称的lambdas ..但至少与IntelliJ的功能要么不存在,要么以我不知道的方式工作。 那么,命名的lambda参数有什么用? 他们是否以某种方式更改编译输出? 有什么技巧可以使用它们吗?

将函数传递给Kotlin中的函数

我开始和Kotlin一起使用Vaadin,并创建了以下扩展方法: fun AbstractComponentContainer.addButton(buttonText : String = "", icon : FontIcon? = null, function : (() -> Unit)? = null) { val button = Button(buttonText) if (icon != null) { button.icon = icon } if (function!=null) { button.addClickListener { function() } } this.addComponent(button) } 这可以让我添加一个按钮到一个容器,一个可选的点击监听器(和一个可选的图标)。 我现在想要添加两个按钮到组件,一个用于向下,一个向下,允许我上下移动项目。 因此,我想调用addButton()两次。 lambda中的逻辑将是相同的,唯一的区别是在一个项目的位置将增加,在另一个递减。 我想创建一个函数,可以传递给addClickListener ,并保存我写两个函数做几乎相同的事情,我希望能够传递给该函数的引用Long::plusAssign和Long::minusAssign 。 我无法得到它的工作。 它不会编译,或者运行时得到ClassCastException 。 这是我必须: val […]

试图了解Kotlin示例

我想学习Kotlin,并通过try.kotlinlang.org上的示例进行工作 我无法理解一些示例,特别是Lazy属性示例: https : //try.kotlinlang.org/#/Examples/Delegated%20properties/Lazy%20property/Lazy%20property.kt /** * Delegates.lazy() is a function that returns a delegate that implements a lazy property: * the first call to get() executes the lambda expression passed to lazy() as an argument * and remembers the result, subsequent calls to get() simply return the remembered result. * If you want thread […]

Kotlin函数类型而不是函数接口lambda

我正在苦苦挣扎在java中的功能接口的对面。 我有以下问题。 class ResultReceiverTest(handler : Handler) : ResultReceiver(handler) { fun onResult(result : (resultCode : Int, resultData: Bundle) -> Unit){ // result() how to receive values from onReceiveResult() method? } override fun onReceiveResult(resultCode: Int, resultData: Bundle){ // how to call onResult from here? // I want to pass resultCode, resultData parameter to onResult function } } […]