- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Ruby 有这种方便快捷的方式来共享实例变量,通过使用像这样的键
attr_accessor :var
attr_reader :var
attr_writer :var
如果我可以简单地使用 attr_accessor
,为什么我会选择 attr_reader
或 attr_writer
?是否有类似性能的东西(我怀疑)?我想这是有原因的,否则他们不会制作这样的 key 。
最佳答案
您可以使用不同的访问器将您的意图传达给阅读您代码的人,并使编写无论其公共(public) API 如何调用都能正常工作的类变得更加容易。
class Person
attr_accessor :age
...
end
在这里,我可以看到我既可以读又可以写年龄。
class Person
attr_reader :age
...
end
这里,可以看出我可能只读了年龄。想象一下,它由此类的构造函数设置,之后保持不变。如果年龄有一个修改器(编写器),并且编写类时假设年龄一旦设置就不会更改,那么调用该修改器的代码可能会导致错误。
但是幕后发生了什么?
如果你写:
attr_writer :age
翻译成:
def age=(value)
@age = value
end
如果你写:
attr_reader :age
翻译成:
def age
@age
end
如果你写:
attr_accessor :age
翻译成:
def age=(value)
@age = value
end
def age
@age
end
知道了这一点,这里有另一种思考方式:如果您没有 attr_... 助手,并且必须自己编写访问器,您是否会编写比您的类需要的访问器更多的访问器?比如age只需要读取,你会不会也写一个方法让它可以写入?
关于ruby - 为什么要使用 Ruby 的 attr_accessor、attr_reader 和 attr_writer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046831/
如何在对象上动态创建属性并将对象分配给它的值?我有以下代码: class Component def initialize end end class BaseClass def i
我最近被下面的代码难住了: class Foo attr_accessor :n def initialize(i) @n = i end def val n en
我希望下面的代码能按预期工作,但它给了我一个 NoMethodError(为 # class MyClass end my_object = MyClass.new my_object.instanc
很抱歉这个问题,可能是真正的新手问题: 我想定义一个返回 bool 值的 getter。 f.i.: attr_reader :server_error? 但是,我该如何更新它,因为如果末尾有问号
这就是 attr_reader 与arrays 一起工作的方式吗? class User def initialize @interests = [] end attr_reade
我发现自己在我的类中初始化了很多变量,我想知道是否有更简单的方法来做到这一点。一旦你获得超过 20 个变量,它就会变得有点多余。 class Car attr_reader :make,
我正在寻找方法来创建相应的 attr_reader 方法,同时在初始化方法中为相应的实例变量设置值?例如下面的代码: class SomeClass attr_reader :hello de
我刚看完POODR的前几章.作者展示了 attr_reader(accessor) 的一个特性,除了 attr_ 的广为人知的特性之外,它还允许您在声明实例变量后引用它们时消除对“@”的需要。 但是,
我有以下代码: class A attr_reader :x, :y private_class_method :new def self.with_data a = ne
在 Ruby 中,有没有办法做类似的事情 class Foo attr_reader :var_name :reader_name #This won't work, of course
在 Ruby 中,您可以通过将以下内容添加到类定义中来创建 getter/setter 方法。 attr_reader :key1, :key2, :key4 attr_writer :key1, :
是否可以在 Ruby 中为 attr_reader 方法起别名?我有一个带有 favorites 属性的类,我想为美国用户别名为 favorites。执行此操作的惯用 Ruby 方法是什么? 最佳答案
attr_reader在 python 中是否有一个“同义词”,就像不需要让我输入的东西一样?: class Foo(): def __init__(self, foo, bar, spam,
Sorbet 显示 attr_reader 错误,但如果我错了请纠正我,当函数被声明而不是被调用时需要 sigs,对吧? 我已经尝试过阅读文档,但我得到的只是这个注释 注意:许多看起来像局部变量的 R
attr_accessor 的文档明确地说它创建了一个实例变量: [...] creating an instance variable (@name) and a corresponding acc
(大编辑,我在那里的一部分......)我一直在努力,我想出了这种方法来指定在读取属性之前需要完成的事情: class Class def attr_reader(*params) if
遇到一些奇怪的行为,想知道是否有其他人可以确认我所看到的。 假设您创建了一个带有成员变量的类,并允许使用 attr_reader 读取它。 class TestClass attr_reader
如果您编写 my_obj.attr,主要是在 Rails 中,它会在数据库中查找 attr 并返返回告。如何创建自定义 def attr 方法,在内部查询数据库中的 attr,修改它并返回?换句话说,
我正在构建一个系统,该系统使用大量小类来进行数据处理(每个类都执行不同的处理步骤,不错且类似于 SRP)。我用一些参数初始化每个类,然后调用该类的 execute() 方法,然后该类使用其他私有(pr
如何在运行时添加类实例变量、它的数据和 attr_reader? class Module def additional_data member, data self.class.send
我是一名优秀的程序员,十分优秀!