3

我是红宝石的新手。

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 子句 - 为什么?

4

2 回答 2

10

我认为这与你定义实例变量的方式有关,你最终会得到

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

所以永远都是假的。如果您真的想将它们放在一行中,您可以这样做(或遵循Doug R解决方案)

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

否则,您可以将它们中的每一个放在单独的行中

这与 Ruby 的多重赋值有关,其中:

foo, bar = [1, 2]  # foo = 1; bar = 2
foo, bar = 1, 2    # foo = 1; bar = 2
foo, bar = 1       # foo = 1; bar = nil
于 2013-07-03T02:47:27.770 回答
2

如果您希望将其放在一行中,则您的分配应如下所示:

@minX, @maxX, @minY, @maxY = 0, 4, 0, 4
于 2013-07-03T03:03:30.003 回答