2013-09-30 101 views
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) 

我一直在挠我的头。有人能告诉我什么是缺少的?

回答

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] 

我不断收到“未定义的方法`< <'为零:NilClass“当我运行它。

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

+1

谢谢。帮助清除我的问题。肯定会记住.. – user2800586

0

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

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

你拥有它,您目前正在申报在水平的实例变量(这工作,因为所有的类继承的方式类)

相关问题