如何实现Ruby中相互绑定变量之类的东西?

时间:2017-12-31 00:15:49

标签: ruby

考虑b = a + 7

我如何让ba保持同步,以便即使a随时间发生变化,该陈述仍然正确?

不仅如此,我怎么能让它反过来工作,如果a也被更改,相应地更新b

2 个答案:

答案 0 :(得分:2)

Ruby中没有相互绑定的变量。您可以使用匿名函数(aka.lambdas)来实现此目的。

a = 0
b = -> {a + 7}
b.()  #=> 7

a = 100
b.()  #=> 107

这对我来说有点难看,因为b 隐含取决于a,这在函数式编程中并不好。

如果您不介意使用obj.attr,也可以通过传统的OO实现此目的。

class Foo
  attr_accessor :a

  def b
    a + 7
  end
end

foo = Foo.new
foo.a = 0
foo.b  #=> 7
foo.a = 100
foo.b  #=> 107

答案 1 :(得分:1)

您可以使用Proc个对象。

a = 1
b = a + 7 #=> 8

proc = Proc.new { b = a + 7  }        
 #=> #<Proc:0x0000000001038760@(irb):3>
a = 2
proc.call
b #=> 9

关于过程和lambas here的快速概述。