2016-09-24 1 views
-2

以下のPythonコードをRubyに翻訳しようとしています。私は "a"にアクセスして将来変更したいと思います。Rubyクラスの変数の例

class c: 
     def __init__(self, a): 
      self.a = a 

o = new c(2) 
print(o.a) 

私はRubyのインスタンス変数について読みましたが、チュートリアルは非常に長く混乱しています。 私が試してみました:

class C 
    def initialize(a) 
    @a = a 
    end 
end 
o = C.new(2) 
puts o.a 
をそれだけでは動作しません。 私はこれで終わる:

class C 
    def initialize(a) 
    @a = a 
    def a 
     @a 
    end 
    end 
end 

が、この1つはあまりにも愚かです。

誰かがPythonコードをRubyに正しく変換していただけますか?ありがとうございました!

+0

あなたの質問は混乱しています。クラス変数については尋ねますが、PythonやRubyの例ではクラス変数はありません。 –

答えて

2

クラス名を大文字にするルービーの規約を使用してください。コードを読みやすくします。

インスタンス変数は、あなたがそれらにアクセスしたい場合は

class MyClass 
    def initialize(a) 
     @a = a 
    end 

    def get_a 
     @a 
    end 
end 

x = MyClass(7) 
puts x.get_a 

を自分の値を返すメソッドを記述する必要があり、クラスの本体でのみアクセス可能です。この溶液が推奨されていることに注意してくださいと代わりにattr_readerまたはattr_accessorを使用してください。

あなたは

class MyClass 
    ... 
    def set_a(a) 
     @a = a 
    end 
end 

x = MyClass(7) 
x.set_a(6) 

あなたはこの

class MyClass 
    ... 
    def a=(a) 
     @a = a 
    end 
end 

x = MyClass(7) 
x.a = 9 

ルビーは、これらのユースケースのショートカットを持っていると呼ばれるアクセサのプロパティを使用することができ、変数のインスタンスを設定したい場合:

attr_reader :v  def v; @v; end 
attr_writer :v  def v=(value); @v=value; end 
attr_accessor :v attr_reader :v; attr_writer :v 
attr_accessor :v, :w attr_accessor :v; attr_accessor :w 

Why use Ruby's attr_accessor, attr_reader and attr_writer?

+0

'get_a'道路を降りるのはちょっと誤解を招くことです。 'attr_accessor'は後で述べる正しい答えですが、それは本当に言及するべき最初のものです。 – tadman

関連する問題