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