因为您的对象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。它们是两个不同的变量,第一个只能在类方法中访问。