1

如果它是回文,我想将用户输入添加到数组中。我不断得到:

undefined method `<<' for nil:NilClass

当我运行它时。

最终我想比较所有值并找到最高值,这就是我在那里开设课程的原因。

class Palindrome
  attr_accessor :palindrome_array
  @palindrome_array = []

  def check_palindromic(variable)

    if variable.reverse == variable
      @palindrome_array << variable
    end
  end
end

a = Palindrome.new
puts "Enter a number"
i = gets.chomp()
a.check_palindromic(i)

我一直在为此挠头。有人可以告诉我缺少什么吗?

4

2 回答 2

0

因为您的对象a没有@palindrome_array您认为它有的实例变量。你需要这样做:

a = Palindrome.new
a.palindrome_array=[]
puts "Enter a number"
i = gets.chomp()
a.check_palindromic(i)

@palindrome_array = []从此代码中删除,因为它具有不同的含义:

class Palindrome
  attr_accessor :palindrome_array
  @palindrome_array = []

以下是补充说明:

class Palindrome
  attr_accessor :palindrome_array
  @palindrome_array = []
    def check_palindromic(variable)
         if variable.reverse == variable
            @palindrome_array << variable
         end
    end
 end  

a = Palindrome.new
Palindrome.instance_variables # => [:@palindrome_array]
a.instance_variables # => []
a.palindrome_array=[]
a.instance_variables # => [:@palindrome_array]

当我运行它时,我不断收到“nil:NilClass 的未定义方法 `<<'”。

嗯。发生这种情况是因为@palindrome_array定义在类下面Palindrome是属于类对象的实例变量。请注意,这与类变量不同,不能称为@@palindrome_array,而在方法@palindrome_array内部定义的check_palindromic是属于 的实例的实例变量Palindrome。它们是两个不同的变量,第一个只能在类方法中访问。

于 2013-09-30T17:43:59.110 回答
0

您需要在类构造函数中初始化所有实例变量:

class Palindrome
   ...
   def initialize 
      @palindome_array = []
   end
   ...
end

您当前拥有它的方式是在级别声明一个实例变量(因为所有类都继承自 Class)

于 2013-09-30T17:45:49.723 回答