【问题标题】:How to I set a ruby variable based on an if-then decision tree如何根据 if-then 决策树设置 ruby​​ 变量
【发布时间】:2014-01-20 08:24:55
【问题描述】:

我想写以下内容:

variable = if x
  a
else
  if y
    b
  else
    c
  end
end

如果 x 为真,则变量等于 a。如果 x 为假且 y 为真,则变量等于 b。如果 x 和 y 都为假,则变量等于 c。

我认为这是有效的 ruby​​ 语法,但是当我尝试它时,变量总是设置为 nil。为什么会这样?如何正确设置?

我正在使用 ruby​​ 1.9.3 顺便说一句

编辑:错误警报。在我的示例中, c 设置为 nil,我认为这是错误的。我原来的语法运行良好。我不确定是否应该删除这个问题的 StackOverflow 礼仪,欢迎提出建议。

感谢您的快速回复。

【问题讨论】:

  • 一旦回答将有投票权,你不能删除这个.. :)

标签: ruby syntax


【解决方案1】:

不要让它变得复杂!写出来没毛病

variable = 
  if    x then a
  elsif y then b
  else  c
end

没有人会看这段代码,不知道发生了什么。

【讨论】:

  • 为了清楚起见,可能会尝试这样做。事实证明,我原来的方法也很有效
  • 这很好,如果代码块只有一条语句.. 对于多行块代码,不是一个好的选择。
  • 好吧,当然,如果您需要插入更长的代码,您可以跳过 then 关键字并使用新行和缩进代替,否则嵌套 if 语句和 elsif 之间没有区别.
【解决方案2】:

主要有两种变体:

  1. 使用if-else-end 树:

    variable =
    if x
      a
    else
      if y
        b
      else
        c
      end
    end
    
  2. 作为逻辑布尔代数表达式:

    variable = x && a || ( y && b || c )
    

    同理:

    variable = x && a || y && b || c
    

通常首选第一个变体,然后您在 if-else-end 块内使用复杂的代码或计算。第二,当使用简单的读/逻辑结构时。

如果您的表达式有错误或得到无效结果,请检查您的逻辑表达式。

【讨论】:

  • 谢谢,您的第一个变体与我的几乎相同。事实证明两者都有效。
  • +1 用于提及 通常首选第一个变体,然后您在 if-else-end 块中使用复杂的代码或计算。
猜你喜欢
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2023-03-15
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多