2011-11-12 4 views
3

커널 변수 # global_variables를 통해 모든 전역 변수를 볼 수 있지만 remove_instance_variable, remove_class_variable, remove_const 메소드와 유사한 변수를 제거 할 수있는 방법이 있습니까? 아니면 같은 것을 이루기 위해 그것들을 사용하는 방법이 있습니까?Ruby에서 전역 변수를 제거하는 방법은 무엇입니까?

+0

저는 그렇게 생각하지 않습니다. (당신이 원할 이유가 무엇입니까?) –

+0

그것에'nil' 값을 할당 할 수 있습니다. 그러나 주석과 마찬가지로 글로벌 변수를 정의하고 제거해야하는 이유는 무엇입니까? 전역 변수는 코드의 어느 위치에서든 무시 될 수 있으므로 피해야합니다. 당신이 그들을 사용해야하는 경우, 극단적 인 신중함과 함께 그들을 사용하십시오. – abhinav

+0

gc 지연으로 인해 ObjectSpace # define_finalizer가 객체가 더 이상 변수에 의해 참조되지 않을 때를 알기에 충분하지 않을 수 있습니다. 커널 # trace_var는 변수가 변경 될 때 발생하는 유일한 콜백이며 전역 변수 인 – user10795

답변

0

저는 전역 변수를 "설정 해제"하는 것이 가능하다고 생각하지 않습니다. 가장 좋은 방법은 변수를 nil으로 설정하는 것입니다.

일반적으로 아직 정의하지 않은 변수를 사용하려고하면 Ruby에서 오류가 발생합니다.

irb > "The following variable has not yet been defined: #{a}" 
irb > NameError: undefined local variable or method `a' for main:Object 

이 동작은 실제로 전역 변수와 다릅니다. 정의되지 않은 전역 변수를 호출하려는 시도는 nil을 반환합니다.

irb > "The following global variable has not yet been defined: #{$a}" 
    # => The following global variable has not yet been defined: 
irb > $a.class 
    # => NilClass 

그래서 전역 변수를 nil로 설정하면 "설정 해제"에서 예상되는 것과 똑같은 동작이 발생합니다.

관련 문제