2014-11-01 40 views
1

下面是有效的ruby代码吗? Intellij不这么认为。我已经向intellij提交了一张票,但我想确保我的代码正常。intellij中有效的ruby代码是否高亮显示红色是否正常?

我知道它不会做任何事情,但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

您提出了错误的问题。如上所述,答案是“是”,而提及“intellij-idea”是无关紧要的。您需要更改问题并提供更多信息。 – 2014-11-01 18:42:20

+0

谢谢卡里。我最初的问题让我感到舒服,因为我不知道。我现在将展开我知道我的代码是有效的。 – 2014-11-02 08:15:19

回答

0

我正在使用RubyMine,它有一个内置的编辑器。你的代码一切正常,只是我没有看到在初始化@first_name@last_name为零的一点。实例变量,当你调用它们时,它们被设置为零。试试这个:

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中的代码。实际上,您可以完全删除整个初始化方法,因为每个实例变量与您最初引用它的位置无关,将评估为零,与使用会导致错误的局部变量不同。

+0

谢谢。我想我的安装的rubymine破坏了:( – 2014-11-01 15:23:28

+0

尝试做文件>无效缓存/重新启动并选择第一个选项。 – daremkd 2014-11-01 15:25:45

+1

不仅可以删除'initialize'中的代码。您可以删除整个方法定义 – ptierno 2014-11-01 15:54:09

0

分配实例变量为零以“初始化”它们是不必要的。当你第一次引用一个实例变量时,它已经被“初始化”为零。它甚至不需要被调用。

见这个例子:

if false # => false 
    @example 
end   # => nil 

p @example # => nil 

而且attr_reader :name,例如,将引用@name,直到它被赋予别的东西会自动分配nil