以下是有效的ruby代码吗? Intellij并不这么认为。我已经用intellij提交了一张票,但我想确保我的代码没问题。
我知道它不会做任何事情,但是intellij告诉我attr_reader是未知的所以我很困惑。
class Person
attr_reader :first_name, :last_name
def initialize
@first_name = nil
@last_name = nil
end
end
我问的原因是intellij将attr_reader突出显示为红色,这通常是语法错误。我把所有时间花在Java和Scala上,所以我对ruby有点失落。有效代码是高亮红色是正常的吗?
答案 0 :(得分:0)
我使用的是RubyMine,它有一个内置的编辑器。对您的代码一切正常,只是我没有看到将@first_name
和@last_name
初始化为零的要点。实例变量,在您调用它们的那一刻,它们被设置为nil。试试这个:
class Person
attr_reader :first_name, :last_name
def initialize
p @first_name
p @last_name
p first_name #=> the method attr_reader created which returns @first_name
p last_name #=> the other method it created which returns @last_name
p @i_can_set_up_any_variable_i_want_here
end
end
Person.new #=> it will print 'nil' 5 times.
所以你可以在initialize中自由删除代码。实际上,您可以完全删除整个初始化方法,因为每个实例变量与您首次引用它的位置无关,将评估为nil,而不像将产生错误的局部变量。
答案 1 :(得分:0)
将实例变量分配给nil以“初始化”它们是没有必要的。当您第一次引用实例变量时,它已经“初始化”为nil。它甚至不需要被调用。
见这个例子:
if false # => false
@example
end # => nil
p @example # => nil
例如,attr_reader :name
会引用@name
,并会自动分配nil
,直到分配了其他内容。