有效的红宝石代码在intellij中是高亮的红色是正常的吗?

时间:2014-11-01 15:18:03

标签: ruby intellij-idea

以下是有效的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有点失落。有效代码是高亮红色是正常的吗?

2 个答案:

答案 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,直到分配了其他内容。