在非常简单的Ruby代码中获取NameError

时间:2015-09-02 04:58:01

标签: ruby

我得到一个NameError,据说可以表明我的数组"五角形"未定义。但如果我没有在第1行中定义它,我就是一个猴子的叔叔。我忘记/误解了什么?目标是编写一个方法,告诉我给定的数字是否是五边形。

pentagonals = []

def pent?(num)
  pentagonals.include?(num)
end

(1..1000).each {|i|
  pentagonals << (i * (3 * i - 1) / 2)
  }

puts pent?(1)

2 个答案:

答案 0 :(得分:2)

Ruby中的全局变量与初始addPreferencesFromResource的所有其他程序名称(如常规变量,类名,方法名称,模块名称等)不同,因此您应该以这种方式更改程序:

$

请注意,应该谨慎使用全局变量,事实上它们很危险,因为它们可以从程序中的任何位置写入。

答案 1 :(得分:0)

方法中的变量是方法范围的局部变量,除非它们作为参数传入。

该方法还可以访问同一范围内的全局变量,类变量和其他方法。

class MyClass

  # calling methods in the same class
  def method1
    method2
  end 

  def method2
    puts 'method2 was called'
  end

  # getter / setter method pair for class variables
  # @class_variable is only accessible within this class
  def print_class_variable
    puts @class_variable
  end

  def set_class_variable(param)
    @class_variable = param
  end

  # global variables can be accessed from anywhere
  def print_global_var 
    puts $global_variable 
  end

  def self.some_class_method
    # cannot be directly accessed by the instance methods above 
  end
end

请注意,不建议使用全局变量,因为它们很容易导致冲突和歧义。

class Dog
  $name = "Dog" 
end

class Cat
  $name = "Cat"
end

puts $name
# which one does $name refer to?