如果它是一个回文,我想将用户输入添加到数组中。我一直在说:
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)
我一直在摸不着头脑。有人能告诉我缺少什么吗?
答案 0 :(得分: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]
我不断得到“未定义的方法”&lt;&lt;&lt;对于nil:NilClass“当我运行它时。
姆。发生这种情况是因为在@palindrome_array
下面定义的Palindrome
是属于类对象的实例变量。请注意,这与类变量不同,并且不能称为@@palindrome_array
,而@palindrome_array
方法中定义的check_palindromic
是属于{{1}的实例的实例变量}。它们是两个不同的变量,第一个只能在类方法中访问。
答案 1 :(得分:0)
您需要在类构造函数中初始化所有实例变量:
class Palindrome
...
def initialize
@palindome_array = []
end
...
end
当前的方式,你在 class 级别声明一个实例变量(这是有效的,因为所有类都继承自Class)