gpt4 book ai didi

ruby - Ruby 中的奇怪结果为 "end if"

转载 作者:行者123 更新时间:2023-12-05 08:43:16 24 4
gpt4 key购买 nike

我希望此代码执行代码块并产生输出 "x""y",或者只是抛出一个语法错误:

if true
puts "x"
end if
puts "y"

但是,解释器会忽略 if true block ,只执行 puts "y"。如果我改为输入以下代码:

if true
puts "x"
end if

解释器以输入结束语法错误退出。为什么第一个代码片段是有效代码但不知何故执行错误是有原因的吗?在我看来,解析器中存在一些错误。

我已经在 Ruby 2.1.2 和 Ruby 2.1.5 中证实了这一点。

最佳答案

这里有两件事一起玩:

  1. puts 的返回值为nil
  2. Ruby 通常足够聪明,可以在当前命令尚未结束时读取下一行。

这意味着:

if true
puts "x"
end if
puts "y"

等于:

if true
puts "x"
end if (puts "y")

Ruby 评估 puts "y" 为 nil:

if true
puts "x"
end if nil

是什么导致 Ruby 不评估 if true block ,因为 if nil 的行为类似于 if false


或者换句话说:您的示例与:

if puts("y") # evaluates to nil (aka is falsey)
if true
puts "x"
end
end

关于ruby - Ruby 中的奇怪结果为 "end if",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com