私はルビーとレールを初めて使っていますが、これらの2つの間でまだ混乱することがあります。オブジェクト(john.name)の後にインスタンス変数の名前を追加してインスタンス変数を呼び出そうとしましたが、その結果がJohnであることを願っています。残念ながら、NoMethodErrorが表示されます。そこで私は答えを探して、これを行うためにinstance_variable_getメソッドを使用できることを知りました。しかし、VIEWS内のオブジェクトのインスタンス変数にアクセスする場合は、RAILSでこれを行うことが可能だと思います。レールとルビのインスタンス変数へのアクセス
class Person
def initialize(name)
@name = name
end
end
john = Person.new("John")
puts john.instance_variable_get(:@name)
=> John
puts john.name
=> NoMethodError
インスタンス変数に直接アクセスすることはできません。変数は一般的に、メソッドやクラス内に閉じ込められたものの一部です。しかし、その価値を得るためには、メソッドに設定するか、 'attr_accessor'を使用してください。以下の2つの答えはあなたにどのように表示されます。 – arjun
Rubyはシンプルです。すべてのオブジェクト公開はメソッドです。外部から直接インスタンス変数にアクセスすることはできません。 – Aetherus
@arjun、あなたはアクセサを必要としません: 'クラスC; def初期化; @x = 1;終わり;終わり; C.new.instance_variable_get(:@ x)#=> 1'である。 –