[] =方法总是返回一个值,即使我重写

时间:2016-05-06 17:10:34

标签: ruby

可能遗漏了一些明显的东西,但我不明白为什么[]=方法总会返回我传入value而不是truefalse的内容。我说明了。我错过的[]=方法有什么特别之处吗?

以下是irb中的一些示例代码,后跟类定义:

irb(main):003:0> aa = ArrayAssignmentTest.new
=> #<ArrayAssignmentTest:0x007feef3119d08 @data=[0, 0, 0, 0]>
irb(main):004:0> aa[0] = 5
=> 5
irb(main):005:0> aa[0] = 1234
=> 1234
irb(main):006:0> aa.inspect
=> "#<ArrayAssignmentTest:0x007feef3119d08 @data=[5, 0, 0, 0]>"
irb(main):007:0> aa[0]
=> 5

班级定义:

class ArrayAssignmentTest
  def initialize
    @data = [0, 0, 0, 0]
  end

  def [](index)
    @data[index]
  end

  def []=(index, value)
    if (0..99).include?(value)
      @data[index] = value
      return true
    else
      return false
    end
  end
end

1 个答案:

答案 0 :(得分:3)

您无法覆盖=[]=的返回值。或者更确切地说,您可以返回任何您想要的内容,但它对调用代码没有任何影响。

a = b[3] = c的语义不是这个......

b[3] = c
a = [b]3

就是这样:

b[3] = c
a = c