本文介绍了let和var在Swift REPL中无效的const重声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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重声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 13:08