我正在尝试将以下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吗?谢谢!
答案 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_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
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?