先计算表达式 1 得到一个对象,再把从表达式 2 到表达式 n 作为参数,来调用该对象的“[]=”方法。
class C
def initialize
@ary = [0,1,2,3,4,5,6,7]
end
def [](i)
@ary[i * 2]
end
def []=( i, v )
@ary[i * 2] = v
end
end
c = C.new
p c[3] # 变成 c.[]( 3 ), 结果为6
p c[3] = 1 # 变成 c.[]=(3,1),结果为1
属性调用
表达式1 '.' 标识符 '=' 表达式2
计算表达式 1 得到一个对象,再以表达式 2 为参数来调用该对象的“标识符=”方法。
class C
def foo
@foo
end
def foo=( v )
@foo = v
end
end
c = C.new
c.foo = 5 # 变成 c.foo=( 5 )
p c.foo # => 5
还可以使用 attr_accessor 来定义属性。
class C
attr_accessor :foo
end
c = C.new
c.foo = 5 # 变成 c.foo=( 5 )
p c.foo # => 5