检查本地Lateinit变量是否已初始化

时间:2019-02-08 22:17:21

标签: kotlin kotlin-lateinit

可以使用以下方法检查成员lateinit变量的初始化:

class MyClass {
    lateinit var foo: Any
    ...
    fun doSomething() {
        if (::foo.isInitialized) {
           // Use foo
        }
    }
}

但是,此语法不适用于本地Lateinit变量。 Lint报告错误:“尚不支持引用变量”。从逻辑上讲,应该有一种方法,因为未初始化时lateinit变量在内部为null。

是否可以检查局部变量是否已初始化?

1 个答案:

答案 0 :(得分:2)

您在问题中显示的代码实际上在Kotlin 1.2及更高版本中还可以,因为foo是实例变量,不是是局部变量。 您报告并在Alexey的注释( model { # Observed value. for (i in 1:n.grid) { Ca[i] ~dbin(p, Com[i,2]) } ## ODE Com[1:n.grid, 1:dim] <- ode(init[1:dim], grid[1:n.grid], D(C[1:dim], t), 0, tol) D(C[1],t)<-alpha * C[1] - mu * C[1] - beta * C[2] D(C[2],t)<-beta * C[2] - kappa * C[2] #prior C[2] ~ dunif(0,10) alpha ~ dbeta(2,5) mu ~ dbeta(2,5) kappa ~ dnorm(0,0.11) beta ~ dbeta(2,5) } ### data list( n.grid = 20, dim = 2, tol = 1.0E-3, init = c(10000, NA,0), grid = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20), Ca= c(1,3,5,7,9,11,12,13,14,15,16,33,45,67,78,89,90,100,130,134), p = 0.95 ) ### initial values for sampler ### list( alpha = 0.5, mu = 0.4, kappa = 0.2, beta = 0.3) 中提到的错误消息可以由真正的局部变量触发,例如,在下面的Unsupported [References to variables aren't supported yet]方法中。

doSomethingElse

因此,当前似乎不支持此功能。想到的唯一可以使用lateinit本地变量的地方是,如果该本地变量是在lambda中捕获的变量?