ALLOWED_TARGETS = ["dresden", "paris", "vienna"]
def missile_launch_allowed(target, secret_key)
allowed = true
аllowed = false if secret_key != 1234
allowed = false unless ALLOWED_TARGETS.include?(target)
allowed
end
puts(missile_launch_allowed("dresden", 9999))
在博客中找到了此代码段。手动跟踪代码会给我false
,但是为什么运行时输出正确?
我现在看不到的部分只是没有跨过我的脑海。请帮助我更好地了解Ruby。
答案 0 :(得分:8)
allowed
不是аllowed
;您有两个不同的变量。具体来说,第一个字母是不同的:第一个变量具有“拉丁文小写字母A”(U + 0061),第二个变量具有“西里尔小写字母A”(U + 0430)。这些字形在大多数(全部?)字体中都相似或相同。因此,您的代码等效于:
ALLOWED_TARGETS = ["dresden", "paris", "vienna"]
def missile_launch_allowed(target, secret_key)
first = true
second = false if secret_key != 1234
first = false unless ALLOWED_TARGETS.include?(target)
first
end
puts(missile_launch_allowed("dresden", 9999))
通过更合理地重命名变量,很明显为什么会得到结果。