2017-12-31 42 views

답변

2

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 
+0

고마워요! 그래도 어떻게 돌아가서 다른 방향으로 움직이게할까요? 다른 쪽에서 같은 작업을 수행하기 위해'b ='수동으로 정의 하시겠습니까? –

+0

예, 가능합니다. 그러나 제 경험상 한 가지 상태를 변경하는 2 가지 방법은 결코 좋은 생각이 아닙니다. 그것은 장기적으로 지저분한 논리로 연결됩니다. – Aetherus

+0

동일한 결과를 안전하게 얻을 수있는 방법이 있습니까? –

1

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.

+0

감사합니다. 좀 더 직접적이기 때문에 나는 다른 대답으로 끝났지 만, 이것은 매우 도움이되었습니다. –