【问题标题】:Ruby if syntax (Two Expressions)Ruby if 语法(两个表达式)
【发布时间】:2012-04-19 13:43:45
【问题描述】:

假设您正在为 Ruby 使用 if 语法,如下所示:

if foo == 3: puts "foo"
elsif foo == 5: puts "foobar"
else puts "bar"
end

有没有办法让 Ruby 在 if 语句中执行两件事,比如:

if foo == 3
    puts "foo"
    foo = 1
elsif foo = ...

我怎样才能使我可以使用第一种语法放入两条语句?

【问题讨论】:

  • 你可以考虑使用case 声明,在这个具体的,呃,案例中。
  • 为什么这个问题被否决???
  • 为什么必须全部放在一条线上?第二种语法读起来好多了,IMO。
  • 还可能值得注意的是,您可以使用then 而不是: 将条件与实际表达式分开。

标签: ruby syntax if-statement


【解决方案1】:
if foo == 3: puts "foo"; puts "baz"
elsif foo == 5: puts "foobar"
else puts "bar"
end

但是,我建议不要这样做。

【讨论】:

  • 你为什么反对它……只是感兴趣? :~)
  • 将多个命令放在以分号分隔的一行中是遇到难以发现的错误的可靠方法。在此示例中,您不会忽略任何内容,但假设您将“foo”扩展为跨越相当多水平空间的实际消息。然后你冒着从右边一直忽略; something_else 的风险。它不会通过这里的代码审查 :)
【解决方案2】:

Ruby 允许用分号分隔一行中的语句,因此您可以这样做:

if foo == 3: puts "foo"; puts "bar"
elsif foo == 5: puts "foobar"
else puts "bar"
end

为了整洁,我可能会用; 终止这两个语句:

if foo == 3: puts "foo"; puts "bar";
elsif foo == 5: puts "foobar"
else puts "bar"
end

除非你有充分的理由,否则我不会这样做,因为它会影响可读性。包含多个语句的普通 if 块更容易阅读。

【讨论】:

  • +1 关于除非有充分理由,否则永远不应该以这种方式实际编码的建议。
【解决方案3】:

我认为 case 语句看起来比 if 语句好得多:

case foo
when 3
  puts "foo"
when 5
  puts "foobar"
else
  puts "bar"
end

这允许每个条件有多个语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多