问题描述
在Swift REPL中,我可以使用 let
分配一个常量,但是为什么以后可以使用 var
对其进行修改?
In Swift REPL I can assign a constant with let
, but why can I modify it later using var
?
let name = "al"
var name = "bob"
Swift在这里没有抱怨,但是不是常量吗?
Swift is not complaining here, but wasn't name a constant?
推荐答案
在Swift中重新声明变量(在相同范围内)无效:
Redeclaring a variable (in the same scope) is not valid in Swift:
$ cat test.swift
let name = "al"
var name = "bob"
$ swiftc test.swift
test.swift:2:5: error: invalid redeclaration of 'name'
var name = "bob"
^
test.swift:1:5: note: 'name' previously declared here
let name = "al"
^
但是,Swift REPL的行为有所不同:
However, the Swift REPL behaves differently:
$ swift
Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). Type :help for assistance.
1> let name = "al"
name: String = "al"
2> var name = "bob"
name: String = "bob"
这是有意的,如
:
...较新的定义替换了所有后续引用的现有定义
... The newer definition replaces the existing definition for all subsequent references
注意:您必须分别输入行。如果将这两个
复制,行到粘贴缓冲区中,启动REPL并将
与 粘贴在一起,然后结果是
Note: You have to enter the lines separately. If you copy thosetwo lines into the paste buffer, start the REPL and pastethem with then the result is
$ swift
Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). Type :help for assistance.
1> let name = "al"
2. var name = "bob"
error: repl.swift:2:5: error: invalid redeclaration of 'name'
var name = "bob"
^
显然,这两个语句现在在相同的作用域
中求值(第二行有一个继续提示)并产生错误。
这两个语句都在同一行中发生相同的情况:
Apparently the two statements are now evaluated in the same scope(the second line has a continuation prompt) and produce an error.The same happens with both statements in a single line:
$ swift
Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). Type :help for assistance.
1> let name = "al" ; var name = "bob"
error: repl.swift:1:23: error: invalid redeclaration of 'name'
let name = "al" ; var name = "bob"
^
这篇关于let和var在Swift REPL中无效的const重声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!