Ruby:未定义的方法

时间:2014-09-23 13:23:30

标签: ruby rubymine

我的第一个带有哈希的ruby程序遇到了问题。我收到错误说

  

'throw':未定义的局部变量或.......

的方向'方向'

以下是代码:

class Die

  directions = {

      north: 1,
      south: 2,
      east: 3,
      west: 4
  }
    def throw

      direction = directions.select{ |key ,value | value == rand(4)+1}
      puts direction

    end
end

 Dice = Die.new
 Dice.throw

问题1

我如何解决此错误?

问题2

Ruby-mine在哈希方向下有一条Z字形线,并提供删除分配的选项为什么会这样?

问题3

“钥匙”下还有一个锯齿形,并提供将其转换为“阻止”为什么会这样?

1 个答案:

答案 0 :(得分:1)

  1. 它与范围有关。方法体在实例的范围/上下文中运行,但类定义在其自己的范围内运行。您可以在initialize方法中使用实例变量并将哈希值初始化为@directions,但在您的情况下,哈希值可能不会更改,因此我建议使用常量。在Ruby中,这些声明就像变量一样,但是当第一个字符是大写时,它们就是常量。

  2. 可能因为变量从未使用过,原因如(1)所述

  3. key也从未使用过,你可以通过使用以下划线(_key)开头的变量名来忽略它,或者只使用下划线也可以。我喜欢使用第一种形式,所以当我稍后回到这段代码时,我知道那里有什么。

  4. 由于更好​​的可读性,它可能希望您将其转换为块。

  5. 完整代码:

    class Die
      DIRECTIONS = {
    
          north: 1,
          south: 2,
          east: 3,
          west: 4
      }
    
      def throw
        direction = DIRECTIONS.select do |_key, value|
          value == rand(4)+1
        end
        puts direction
      end
    end