2016-09-24 157 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 

但這個實在是太傻了。

有人可以請將上面的Python代碼正確地轉換爲Ruby嗎?謝謝!

+0

你的問題很混亂。您可以詢問關於類變量的信息,但Python或Ruby示例中沒有任何類變量。 –

回答

2

嘗試使用大寫類名的ruby約定。它使代碼更具可讀性。

實例變量只在類的主體訪問,如果你想訪問他們,你必須編寫返回自己的價值

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

    def get_a 
     @a 
    end 
end 

x = MyClass(7) 
puts x.get_a 

請注意,這個解決方案是鼓勵和方法您應該使用attr_readerattr_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