Ruby类变量示例

时间:2016-09-24 22:56:59

标签: python ruby

我正在尝试将以下Python代码翻译为Ruby。我想访问" a"并在将来改变它。

   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吗?谢谢!

1 个答案:

答案 0 :(得分: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

ruby​​为这些称为访问者的用例提供了快捷方式:

 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?