pan*_*rey 0 ruby variables comparison instance
这是一个Java代码:
public class test{
public static void main(String args[]){
number A = new number();
System.out.println(A.b);
}
}
class number{
int b = 100;
}
Run Code Online (Sandbox Code Playgroud)
在没有attr_accessor的ruby中是否有相当于上面的代码?
为什么我们不能使用'.'访问成员变量.喜欢在java?还是有一种我不知道红宝石的方式......?
默认情况下隐藏实例变量.你可以通过使用instance_variable_get和instance_variable_set来解决这个问题,但这些都是私有的(如果你必须的话,你也可以解决这个问题),因为这样做是不明白的.
在Ruby中,当你说foo.bar,你bar在foo对象上调用方法(没有参数).当你说foo.bar = 5,你正在bar=使用参数调用方法5.
所有attr_accessor做的就是提供的实现bar,并bar=为你,但这:
class MyClass
attr_accessor :bar
end
Run Code Online (Sandbox Code Playgroud)
相当于
class MyClass
def bar
@bar
end
def bar=(new_bar)
@bar = new_bar
end
end
Run Code Online (Sandbox Code Playgroud)
如果您愿意,这可以让您稍后用其他内容替换实现.实例变量应该是该对象的私有变量,因此除非您正在进行重载元编程,否则我不建议尝试解决此问题.