可能遗漏了一些明显的东西,但我不明白为什么[]=
方法总会返回我传入value
而不是true
或false
的内容。我说明了。我错过的[]=
方法有什么特别之处吗?
以下是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
答案 0 :(得分:3)
您无法覆盖=
或[]=
的返回值。或者更确切地说,您可以返回任何您想要的内容,但它对调用代码没有任何影响。
a = b[3] = c
的语义不是这个......
b[3] = c
a = [b]3
就是这样:
b[3] = c
a = c