首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“表达式解析为未使用的l值”vs“表达式未使用”

“表达式解析为未使用的l值”vs“表达式未使用”
EN

Stack Overflow用户
提问于 2018-08-22 05:25:46
回答 1查看 661关注 0票数 4

考虑以下代码:

代码语言:javascript
复制
class Foo {
    let bar = "Hello world!"
    init () {
        self // Warning: Expression of type 'Foo' is unused
        self.bar // Error: Expression resolves to an unused l-value
    }
    func test () {
        self.bar // Warning: Expression of type 'String' is unused
    }
}

为什么消息不同,为什么只有一条消息是错误的?我理解它们的意思,我只是不明白为什么编译器会以不同的方式处理它们。

EN

回答 1

Stack Overflow用户

发布于 2018-08-22 06:56:07

编译器之所以在初始化器中将self.bar视为l值,是因为在初始化期间,您可以在初始化期间的任何时候为常量属性赋值,即使您已将其声明为常量,因此编译器会将其视为错误,因为有机会修改常量...

test()函数中的self.bar被视为r值,因为该属性被声明为常量,并且编译器知道您不能修改它,因此不会生成错误,它将被视为r值,并且返回值未使用。

如果您需要更好地理解,请尝试将属性更改为变量而不是常量,您会发现即使是test()方法中的self.bar语句也会出错,因为编译器猜测这个值也可以是左值。

代码语言:javascript
复制
class Foo {
    var bar = "Hello world!"
    init () {
        self // Warning: Expression of type 'Foo' is unused
        self.bar  // Error: Expression resolves to an unused l-value
    }
    func test () {
        self.bar // Changed to : Error: Expression resolves to an unused l-value
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51956912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档