为什么变量赋值之外的数字会编译?

时间:2016-03-09 18:28:00

标签: swift

为什么在Swift中我可以输入数字而不将它们分配给var或let,代码编译得很好?这有什么好处?

import Foundation

55

25

23+8

print("Hello, World!")

4

11

-45

4 个答案:

答案 0 :(得分:2)

  

这有什么好处?

对于任何事情都没有好处,因为它不会对程序的流程造成任何影响。如果你明白我的意思,这只是你为了好玩而做的事情。数值没有被捕获,所以实际上它会被立即丢弃,就像一个虚拟粒子在一个瞬间闪烁并且在下一个时刻不再存在。

合法的原因是Swift语句是一个可评估的表达式。数字文字是一个可评估的表达式,因此它是合法的 - 尽管是无用的 - 作为一个独立的陈述。

你可以通过许多其他方式看到同样的事情。这是合法的:

pack <- "name_of_your_package"

path <- find.package(pack)

system(paste(shQuote(file.path(R.home("bin"), "R")),"CMD", "Rd2pdf", shQuote(path)))

let n = 23 n 是一个可评估的表达式,因此它作为单独的语句是合法的。但这没用。

编辑在回答下面的评论时:我认为无用的陈述无法阻止程序编译。但是在这样的情况下,我同意如果编译器警告您正在做一些无用的事情可能会有所帮助,事实上,对于至少一例这类事情,我已经提交了一份错误报告,要求这样做。

答案 1 :(得分:1)

Swift是一种具有副作用的语言,这意味着某些操作可能导致程序全局状态的突变。这具有以下含义:编译器不能简单地消除独立语句,而不会在不影响程序执行的情况下确保它可以这样做。由于程序中状态的复杂性,这通常不是一个小问题,因此为了不惩罚希望调用具有副作用的函数的用户,必须绘制一条线; Swift选择让用户放置任何类型的独立语句,即使是那些显然没有副作用(常量或常量表达式)的语句,而不是花费大量精力来尝试区分各种可能性。

可能存在编译时警告,显示无效的代码行。我对Swift了解不多,所以我无法告诉你,但如果有,你应该可以在文档中找到它。

答案 2 :(得分:0)

它与数字或表达式是有效语句的事实有关。所以它可以独立存在。其他一些语言具有相同或相似的功能。

答案 3 :(得分:0)

与任何语言一样,你可以发出不感兴趣的句子...... 55就是这么快的句子。您可能认为删除无用的句子可能很容易,但这是不可能的,那么为什么不消除(在编译时)明显的句子呢?因为,一般来说,人们不会尝试使用它们或仅仅是为了锻炼,而且不值得努力。禁止55很容易,但double dArea = (dLength * dWidth); 呢?简单?或n=n(这更棘手,因为你需要在编译器中实现表达式的数学属性,以及它们的优化技巧)。