Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin分配的意外值_Kotlin - Fatal编程技术网

Kotlin分配的意外值

Kotlin分配的意外值,kotlin,Kotlin,lambdas和函数链接有问题,行为异常。 请参见代码中的注释: class User() { var i = 0 fun simpleFoo() { println("Unit") } } class Either { lateinit var b: User fun foo(fnR: (User) -> Any): Any = fnR(b) } class A { fun main() { val

lambdas和函数链接有问题,行为异常。 请参见代码中的注释:

class User() {
    var i = 0

    fun simpleFoo() {
        println("Unit")
    }
}

class Either {
    lateinit var b: User

    fun foo(fnR: (User) -> Any): Any = fnR(b)
}

class A {
    fun main() {
        val either = Either<User>()
        either.foo(::handleUser) // works fine
        either.foo() { user ->
            user.i = 3 // Expected value of type Any
        }
    }

    fun handleUser(user: User) {
        user.simpleFoo()
    } 
}
class用户(){
变量i=0
有趣的simplefo(){
println(“单位”)
}
}
类或{
lateinit变量b:用户
fun-foo(fnR:(用户)->Any):Any=fnR(b)
}
甲级{
主要内容(){
val或=或()
foo(::handleUser)//工作正常
foo(){user->
user.i=3//任何类型的预期值
}
}
fun handleUser(用户:用户){
user.simplefo()
} 
}

发生这种情况是因为Kotlin中的赋值不是表达式。所以它不会返回单位

解决方法是只使用函数链接

either.foo(::handleUser) // works fine

这是因为Kotlin中的赋值不是表达式。所以它不会返回单位

解决方法是只使用函数链接

either.foo(::handleUser) // works fine

eather.foo(::handleUser)
这样的函数链接是可以的,但是如果您想使用lambda表达式,那么在您的例子中您犯了一个错误。你的职能

fun foo(fnR: (User) -> Any): Any = fnR(b)
接收一个返回类型为
Any
的值的函数,因此必须从lambda返回类型为
Any
的值(忘记返回值),如:


eather.foo(::handleUser)
这样的函数链接是可以的,但是如果您想使用lambda表达式,那么在您的例子中您犯了一个错误。你的职能

fun foo(fnR: (User) -> Any): Any = fnR(b)
接收一个返回类型为
Any
的值的函数,因此必须从lambda返回类型为
Any
的值(忘记返回值),如:


@Tenfour04是的,我的误解,纠正了。@Tenfour04是的,我的误解,纠正了。