- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我最近被下面的代码难住了:
class Foo
attr_accessor :n
def initialize(i)
@n = i
end
def val
n
end
def bump!
n += 1
end
end
f = Foo.new(0)
puts f.val
f.bump!
puts f.val
成功并按预期打印出 0
。 f.bump!
导致以下 NoMethodError
foo.rb:13:in `bump!': undefined method `+' for nil:NilClass (NoMethodError)
from foo.rb:20:in `<main>'
知道为什么 n
在表达式 n += 1
中是 nil
吗?
使用 n = 1 + n
会引发一个 TypeError
(nil 不能被强制转换为 Fixnum
),所以 n
实际上是 nil
。
最佳答案
即使您已经为 Foo
定义了一个 n=
方法,Ruby 也不允许您在类中 调用它显式接收器,即 self.n=
因此,当您编写 n += 1
时,它会被翻译成 n = n + 1
。 n=
没有明确的接收者,因此 Ruby 创建了一个局部变量 n
(即 nil
)。因此 n + 1
中的 n
指的是一个 nil
局部变量,给你 NoMethodError
。
仅供引用,您不需要attr_accessor
,除非您希望n
可以在类之外 访问!即使这样,当您编写实例方法时,您也应该只使用普通的实例变量 @n
。
关于Ruby attr_reader 和 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124296/
如何在对象上动态创建属性并将对象分配给它的值?我有以下代码: 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
我是一名优秀的程序员,十分优秀!