- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如果我理解正确的话,Ruby 允许设置实例属性只有当它们声明为可写时(例如通过 attr_writer
、attr_accessor
或自定义 setter 方法)。我注意到我可以在没有显式编写器方法的情况下设置哈希属性:
class HashSetter
attr_reader :hash
def initialize
@hash = {}
end
def set_hash
self.hash[:message] = 'haha'
end
end
obj = HashSetter.new
obj.set_hash
puts obj.hash
# -> {:message=>"haha"}
正如预期的那样,如果我使用“常规”变量而不是散列,则相同的代码将无法工作:
class VarSetter
attr_reader :var
def initialize
@var = nil
end
def set_var
self.var = 10
end
end
obj = VarSetter.new
obj.set_var
# ->
# check_accessors.rb:26:in `set_var': undefined method `var=' for #<VarSetter:0x00000001cba510 @var=nil> (NoMethodError)
为什么允许我在第一段代码中设置 :hash
属性?
最佳答案
在您的第一个示例中,您没有设置 hash
属性,您实际上是在获取属性(使用属性读取器)并调用 []=
方法它。如果没有 attr_writer
,您不能做的是直接分配给 self.hash
,即您不能编写 self.hash = {}
code>,这就是你在第二个例子中出错的原因。
关于ruby - 为什么我可以在没有 attr_writer 的情况下设置哈希属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647623/
我可以想象,当您希望某个属性只可读,或可写和可读时,而不是当您希望某个属性可写而不可读时。 在某些情况下,您可能想要读取某些属性但无法更改它们。例如,如果您有一个 Animal 类并想用名称、年龄和颜
我对 Ruby 的 attr_writer 感到困惑。我试图在数组中添加一个值,但遇到以下错误: Line 13: undefined method `test' for # (NoMethodErr
这个问题在这里已经有了答案: Why do Ruby setters need "self." qualification within the class? (3 个答案) 关闭 7 年前。 如果
这是我的模块: module A def self.data=(data) @data = data end end 我想改用attr_writer。在这种情况下可能吗? 最佳答案 您
如果我理解正确的话,Ruby 允许设置实例属性只有当它们声明为可写时(例如通过 attr_writer、attr_accessor 或自定义 setter 方法)。我注意到我可以在没有显式编写器方法的
我需要编写具有依赖关系的类。我来自 .NET 背景,在 .NET 中,我们主要使用构造函数注入(inject)来将类依赖项注入(inject)到类中。我四处阅读,发现大多数博客(或者至少是我看过的博客
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
这个问题在这里已经有了答案: Why do Ruby setters need "self." qualification within the class? (3 个答案) 关闭 7 年前。 这不
我正在使用 Ruby on Rails 3,因为我声明了一个包含很多变量的类,所以我会为这些类变量一次性声明所有“attr_reader”或“attr_writer” . 我试过了 class Per
新手提醒 我正在观看 Ryan Bate 的一个关于虚拟属性的 RailsCasts。他正在为博客平台上的一篇文章添加标签。 http://media.railscasts.com/assets/ep
Ruby 有这种方便快捷的方式来共享实例变量,通过使用像这样的键 attr_accessor :var attr_reader :var attr_writer :var 如果我可以简单地使用 att
我是一名优秀的程序员,十分优秀!