参考下面的代码,有一种方法可以将变量row
从class A
传递到class B#kick
并获取存储的数据?
class A
attr_accessor :row
def fetch
B.new.kick(self.row)
puts row.inspect
end
end
class B
def kick(x)
x = [3,4]
end
end
@test = A.new.fetch
expect(@test.row).to eql([3,4])
当前O / P => nil
但是,如果我通过self并分配有效的方法,但是我不想使用这种方法: 工作代码
class A
attr_accessor :row
def fetch
B.new.kick(self)
puts row.inspect
end
end
class B
def kick(x)
x.row = [3,4]
end
end
@test = A.new.fetch
#=> [3, 4]
答案 0 :(得分:3)
简短版本:
x = [3, 4]
将创建新的数组实例并将其保存到x
变量中,其中row
仍将引用原始值(或没有值nil
)。
另一种方法可以是kick
方法来返回“被踢”的值。
class A
def fetch
@row = B.new.kick
puts row.inspect
end
end
class B
def kick(x)
[3,4]
end
end
如果要遵循面向对象的编程原理“告诉我,不要问”,则可以尝试访问者模式方法。
class A
def fetch
B.new.kick(self)
puts row.inspect
end
def save(row)
@row = row
end
end
class B
def kick(x)
x.save([3,4])
end
end