2013-07-03 63 views
3

我是Ruby新手。比較實例變量的相等性

class X 
    attr_accessor :minX, :maxX, :minY, :maxY 

    def initialize 
    @minX = 0, @maxX = 4, @minY = 0, @maxY = 4 

    if @minX == @minY && @maxX == @maxY 
     # do stuff 
    else 
     # not square 
    end 
    end 
end 

這總是進入else子句 - 爲什麼?

回答

10

我認爲這與我們定義的實例變量的方式做,你最終會與

@maxX=4 
@minY=0 
@maxY=4 
@minX=[0, 4, 0, 4] 

所以它永遠是假的。如果你真想把它們一條線,你可以做(​​或跟隨Doug R溶液)

@minX = 0; @maxX = 4; @minY = 0; @maxY = 4 

否則,你可以把他們每個人在一個獨立的行

這與RUBYS多個任務分配其中:

foo, bar = [1, 2] # foo = 1; bar = 2 
foo, bar = 1, 2 # foo = 1; bar = 2 
foo, bar = 1  # foo = 1; bar = nil 
+1

是有道理的,一直在做太多的Groovy。 – wulfgarpro

+0

當我從另一種語言切換時,我仍然對這種功能感到困惑:) – NicoSantangelo

+3

我認爲最好的解決方案是「把它們中的每一個放在一個單獨的行中」。根據[Ruby風格指南](https://github.com/bbatsov/ruby-style-guide):「不要使用;將語句和表達式分開,作爲必然結果 - 每行使用一個表達式。」 –

2

你的任務應該不是這個樣子,如果你想在同一行:

@minX, @maxX, @minY, @maxY = 0, 4, 0, 4