Ruby中何时需要do关键字?
例如,以下代码中是否存在Ruby中何时需要do关键字?,ruby,Ruby,例如,以下代码中是否存在do会影响程序的行为 while true do puts "Hi" break end while true puts "Hi" break end 根据手册第5.2.1节: while或till循环中的do关键字类似于 if语句:只要换行符(或 分号)出现在循环条件和循环体之间 所以,不,它不会改变行为,只是可选语法。让我们来看看 要快速回答这个问题,我们可以查看Ruby的文档,并找到其中的状态 do关键字是可选的 这两个例子是等价
do
会影响程序的行为
while true do
puts "Hi"
break
end
while true
puts "Hi"
break
end
根据手册第5.2.1节:
while
或till
循环中的do
关键字类似于
if
语句:只要换行符(或
分号)出现在循环条件和循环体之间
所以,不,它不会改变行为,只是可选语法。让我们来看看
要快速回答这个问题,我们可以查看Ruby的文档,并找到其中的状态
do关键字是可选的
这两个例子是等价的,但它们是相同的吗?他们可能会做同样的事情,但也许有理由偏袒其中一个。我们可以查看这些示例生成的AST,看看是否有任何差异
> gem install ruby_parser
> irb
> require 'ruby_parser'
=> true
> with_do = <<-END
while true do
puts "Hi"
break
end
END
=> "while true do\n puts \"Hi\"\n break\nend\n"
> without_do = <<-END
while true
puts "Hi"
break
end
END
=> "while true\n puts \"Hi\"\n break\nend\n"
> RubyParser.new.parse with_do
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true)
> RubyParser.new.parse without_do
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true)
>gem安装ruby\u解析器
>内部评级
>需要“ruby_解析器”
=>正确
>with_do=with_do=RubyParser.new.parse with_do
=>s(:while,s(:true),s(:block,s(:call,nil,:put,s(:str,“Hi”)),s(:break)),true)
>RubyParser.new.parse而不使用
=>s(:while,s(:true),s(:block,s(:call,nil,:put,s(:str,“Hi”)),s(:break)),true)
没有。这两个示例执行完全相同的指令,因此我们可以选择更容易阅读的样式。一个常见的偏好是尽可能省略
do
:这很有趣(我必须看看ruby\u解析器
),但在所有irb
提示下阅读起来不必要的困难。我建议你删除它们。@CarySwoveland你可以编辑提示,帮助这个问题看起来更好。@diego.greyrobot,我几乎从不编辑别人写的东西。在我看来,他们拥有这些文字,所以我只能建议修改。(我知道这很老派。)当别人编辑我写的东西时,你能猜出我的反应吗?:-)谢谢@CarySwoveland,这对你来说更容易阅读吗?我总是不确定是否应该努力获得清晰的示例或输出的文字副本。“我不确定哪一个更容易被其他人模仿和复制。”“卡里斯沃夫兰,你应该这么做。”。这将提高社区其他人的内容质量:)如果有人迷路了,向他们问路,而其他人开始帮助,但你注意到他们的部分方向模棱两可,你会认为“我不应该插嘴,他们拥有他们所说的方向”。或者你能帮我理清方向吗?