没有attr_accessor的等效ruby代码?

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?还是有一种我不知道红宝石的方式......?

Jer*_*man 5

默认情况下隐藏实例变量.你可以通过使用instance_variable_get和instance_variable_set来解决这个问题,但这些都是私有的(如果你必须的话,你也可以解决这个问题),因为这样做是不明白的.

在Ruby中,当你说foo.bar,你barfoo对象上调用方法(没有参数).当你说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)

如果您愿意,这可以让您稍后用其他内容替换实现.实例变量应该是该对象的私有变量,因此除非您正在进行重载元编程,否则我不建议尝试解决此问题.