gpt4 book ai didi

ruby - 初始化 Ruby 对象中的属性

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:22 25 4
gpt4 key购买 nike

我创建了一个 Spam 类型的新对象,具有指向 hooray 和 name 的 attr_accessor,并且我有初始化方法。我期望当我创建一个新对象时,该对象加载了一个名称为“Whammy”的变量和一个名为 hooray 的空数组。虽然我没有得到这种行为。任何人都可以解释一下,提前谢谢。

module Test
class Spam
attr_accessor :hooray, :name

def initialize
hooray = []
name = "Whammy"
end
end
end

Loading development environment (Rails 3.0.0)
irb(main):001:0> require 'Test'
=> nil
irb(main):002:0> test = Test::Spam.new
=> #<Test::Spam:0x000000031ff470>
irb(main):003:0> test.name
=> nil
irb(main):004:0> test.hooray
=> nil
irb(main):005:0> test.hooray << 5
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.<<
from (irb):5
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:44:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands/console.rb:8:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.0/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
irb(main):006:0>

最佳答案

这里的问题是您试图在 initialize 方法中直接使用 setter,但 Ruby 将此解释为创建局部变量,而不是在 self 上调用 setter .

 def initialize
hooray = []
name = "Whammy"
end

您可以通过以下两种方式之一解决此问题;直接设置属性,如@attribute:

 def initialize
@hooray = []
@name = "Whammy"
end

或者,如果您真的想通过 setter (例如,如果您有自定义 setter 来做一些有趣的事情),请使用 self.setter 使其显式:

 def initialize
self.hooray = []
self.name = "Whammy"
end

关于ruby - 初始化 Ruby 对象中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com