为什么此代码段应返回“ false”时输出“ true”?

时间:2019-10-29 09:45:35

标签: ruby

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。

1 个答案:

答案 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))

通过更合理地重命名变量,很明显为什么会得到结果。