如何根据 if-then 决策树设置 ruby​​ 变量

Posted

技术标签:

【中文标题】如何根据 if-then 决策树设置 ruby​​ 变量【英文标题】:How to I set a ruby variable based on an if-then decision tree 【发布时间】: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,我认为这是错误的。我原来的语法运行良好。我不确定是否应该删除这个问题的 *** 礼仪,欢迎提出建议。

感谢您的快速回复。

【问题讨论】:

一旦回答将有投票权,你不能删除这个.. :) 【参考方案1】:

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

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

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

【讨论】:

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

主要有两种变体:

    使用if-else-end 树:

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

    作为逻辑布尔代数表达式:

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

    同理:

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

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

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

【讨论】:

谢谢,您的第一个变体与我的几乎相同。事实证明两者都有效。 +1 用于提及 通常首选第一个变体,然后您在 if-else-end 块中使用复杂的代码或计算。

以上是关于如何根据 if-then 决策树设置 ruby​​ 变量的主要内容,如果未能解决你的问题,请参考以下文章

决策树

决策树(decision tree)

李航统计学习方法(第二版):决策树简介

《统计学习方法(李航)》讲义 第05章 决策树

人工智能_5_决策树_随机森林

决策树