3
커널 변수 # global_variables를 통해 모든 전역 변수를 볼 수 있지만 remove_instance_variable, remove_class_variable, remove_const 메소드와 유사한 변수를 제거 할 수있는 방법이 있습니까? 아니면 같은 것을 이루기 위해 그것들을 사용하는 방법이 있습니까?Ruby에서 전역 변수를 제거하는 방법은 무엇입니까?
커널 변수 # global_variables를 통해 모든 전역 변수를 볼 수 있지만 remove_instance_variable, remove_class_variable, remove_const 메소드와 유사한 변수를 제거 할 수있는 방법이 있습니까? 아니면 같은 것을 이루기 위해 그것들을 사용하는 방법이 있습니까?Ruby에서 전역 변수를 제거하는 방법은 무엇입니까?
저는 전역 변수를 "설정 해제"하는 것이 가능하다고 생각하지 않습니다. 가장 좋은 방법은 변수를 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로 설정하면 "설정 해제"에서 예상되는 것과 똑같은 동작이 발생합니다.
저는 그렇게 생각하지 않습니다. (당신이 원할 이유가 무엇입니까?) –
그것에'nil' 값을 할당 할 수 있습니다. 그러나 주석과 마찬가지로 글로벌 변수를 정의하고 제거해야하는 이유는 무엇입니까? 전역 변수는 코드의 어느 위치에서든 무시 될 수 있으므로 피해야합니다. 당신이 그들을 사용해야하는 경우, 극단적 인 신중함과 함께 그들을 사용하십시오. – abhinav
gc 지연으로 인해 ObjectSpace # define_finalizer가 객체가 더 이상 변수에 의해 참조되지 않을 때를 알기에 충분하지 않을 수 있습니다. 커널 # trace_var는 변수가 변경 될 때 발생하는 유일한 콜백이며 전역 변수 인 – user10795