オブジェクト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
。これらは 2 つの異なる変数であり、最初の変数はクラス メソッドでのみアクセスできます。