2014-11-01 65 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

相關問題