b = a + 7
을 고려하십시오.Ruby에서 상호 바인딩 변수와 같은 것을 달성하는 방법은 무엇입니까?
어떻게 진술도 시간이 지남에 a
변화로 진정한 남아 그래서 b
가 a
따라갈 수 있을까요?
그 외에도 다른 방법으로도 작동 할 수 있습니까? b
도 이에 따라 a
을 업데이트하면 어떻게됩니까?
b = a + 7
을 고려하십시오.Ruby에서 상호 바인딩 변수와 같은 것을 달성하는 방법은 무엇입니까?
어떻게 진술도 시간이 지남에 a
변화로 진정한 남아 그래서 b
가 a
따라갈 수 있을까요?
그 외에도 다른 방법으로도 작동 할 수 있습니까? b
도 이에 따라 a
을 업데이트하면 어떻게됩니까?
Ruby에는 상호 바인딩 변수가 없습니다. 이를 달성하기 위해 익명 함수 (일명 람다)를 사용할 수 있습니다. b
암시는 함수형 프로그래밍에 좋은하지 않은, a
에 의존하기 때문에
a = 0
b = -> {a + 7}
b.() #=> 7
a = 100
b.() #=> 107
이
나를 위해 조금 추한입니다.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
Proc 개체를 사용할 수 있습니다.
a = 1
b = a + 7 #=> 8
proc = Proc.new { b = a + 7 }
#=> #<Proc:[email protected](irb):3>
a = 2
proc.call
b #=> 9
procs 및 lambas에 대한 간략한 개요 here.
감사합니다. 좀 더 직접적이기 때문에 나는 다른 대답으로 끝났지 만, 이것은 매우 도움이되었습니다. –
고마워요! 그래도 어떻게 돌아가서 다른 방향으로 움직이게할까요? 다른 쪽에서 같은 작업을 수행하기 위해'b ='수동으로 정의 하시겠습니까? –
예, 가능합니다. 그러나 제 경험상 한 가지 상태를 변경하는 2 가지 방법은 결코 좋은 생각이 아닙니다. 그것은 장기적으로 지저분한 논리로 연결됩니다. – Aetherus
동일한 결과를 안전하게 얻을 수있는 방법이 있습니까? –