【问题标题】:Undefined method using ternary operators in Ruby在 Ruby 中使用三元运算符的未定义方法
【发布时间】:2021-01-21 22:16:32
【问题描述】:

试图在同一个文件中编写两个方法来检查数字参数。第一种方法很好地通过了所有测试,但第二种方法一直给我 NoMethodError,即使它自己的方法通过了。

这是我的代码:

def unsafe?(speed)
        if speed < 40 
            return true
        elsif speed > 60
            return true 
        else
            return false
end

def not_safe?(speed)
        speed < 40 || speed > 60 ? true : false
    end
end

【问题讨论】:

  • 请添加错误堆栈跟踪

标签: ruby methods ternary


【解决方案1】:

您缺少 end 关键字到 if。如果您正确缩进代码,这就是它的样子:

def unsafe?(speed)
  if speed < 40 
    return true
  elsif speed > 60
    return true 
  else
    return false
  end
  
  def not_safe?(speed)
    speed < 40 || speed > 60 ? true : false
  end
end

如您所见,代码永远不会到达def not_safe?(speed),因为该方法已经返回。 Ruby 允许嵌套方法定义,但它们的实际用途是 universally discouraged

它应该是这样的:

def unsafe?(speed)
  if speed < 40 
    return true
  elsif speed > 60
    return true 
  else
    return false
  end
end

def not_safe?(speed)
  speed < 40 || speed > 60 ? true : false
end

但这确实是一种非常复杂的处理方式:

def unsafe?(speed)
  !speed.between(40,60)
end

使用三元运算符的整个想法很奇怪,因为 speed &lt; 40 || speed &gt; 60 无论如何都会评估为真或假。

【讨论】:

  • 一个更具表现力的选择可能是!speed.between?(40, 60)
猜你喜欢
  • 2019-02-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多