특정 변수의 값이 변경 될 때마다 호출되는 루비가 있습니까?변수가 변경 될 때 호출 될 후크
답변
Ruby 용 C 확장을 작성하는 경우 실제로 누군가가 설정할 때마다 세터 훅을 트리거하는 전역 변수를 만들 수 있습니다.
하지만 C를 써야하기 때문에 그렇게하고 싶지는 않을 것입니다. 관리하기가 어려울 수 있습니다.
더 나은 전략은 변수를 읽고 적절한 방법으로 설정하도록하는 것입니다. 그런 다음 setter 메서드가 호출되면 원하는 모든 작업을 수행 할 수 있습니다. 다음은 객체 내부에 변수를 캡슐화하는 예제입니다.
class Foo
def bar=(v)
@bar = v
# do some stuff
end
def bar
@bar
end
end
마찬가지로 변수를 객체 대신 모듈 또는 클래스에 캡슐화 할 수 있습니다.
+1. 당신이 작성한 C 확장 모듈의 예를 가리킬 수있는 기회는 무엇입니까? – Swanand
예, https://github.com/ruby/ruby/blob/trunk/README.EXT에서'rb_define_hooked_variable'을 확인하십시오. –
머리말 : 이것은 해결책이 아닙니다. (pst는 이미 작성했으나 없음) 특수한 상황에서 도움이 될 수 있습니다.
내 첫번째 생각은 솔루션을 얻을 수 freeze
를 사용하는 것이 었습니다 : 지금
a = "aa"
a.freeze
a << 'b' #can't modify frozen string (RuntimeError)
우리가 freeze
를 재정의해야합니다 및 변수의 값이 변경 될 때 우리는 힌트를 얻을 :
module FreezeWarning
def freeze
puts "#{self}: I am changed"
end
end
a = "aa"
a.extend(FreezeWarning)
a.freeze
a << 'b' #aa: I am changed
먼저 문제를 : There is no way to get the variable name.
당신은module FreezeWarning
def change_warning(name)
@varname = name
self.freeze
end
def freeze
puts "<#{@varname}> (#{self}): I am changed"
end
end
a = "aa"
a.extend(FreezeWarning)
a.change_warning('a')
a << 'b' #<a> (aa): I am changed
그러나 더 큰 문제 (당신은 당신의 자신의 변수 식별, 그것은 안됩니다 이름을 정의 할 수 있습니다) 추가 변수와 함께이 문제를 해결 할 수 가
: 이것은 단지 값의 변화,하지와 함께 작동 새 과제 :
a = 5
a.freeze
a = 4
p a # -> 4
그래서 매우 제한된 '해결책'입니다.
아이디어를 제공해 주셔서 감사합니다. – sawa
- 1. 변수가 변경 될 때 함수 호출
- 2. 변수가 변경 될 때 패널 집합 업데이트
- 3. WebView가 변경 될 때 호출 기능
- 4. 생성자가 호출 될 때?
- 5. 변수가 변경 될 때까지 일시 중지
- 6. ASP.NET : Application.Error 메서드가 global.asax에서 호출 될 때 세션 변수가 존재합니까?
- 7. SQLiteOpenHelper, onCreate가 호출 될 때
- 8. textFieldShouldReturn이 호출 될 때 popViewController?
- 9. 변수가 변경 될 때 데이터를 출력하는 것에 대한 도움말
- 10. 문자열 변수가 변경 될 때 이벤트가 실행되지 않음
- 11. 세션 변수가 변경 될 때 알림을받는 방법이 있습니까?
- 12. 활성화 될 때 현지화 변경
- 13. UITableView가 변경 될 때 알림
- 14. 전역 변수가 갱신 될 때 마스킹 신호
- 15. 데이터베이스에 추가 될 때 변수가 공백으로 반환됩니다.
- 16. GtkWindow가 변경 될 때 GtkButton 색상 변경
- 17. 항목이 목록 상자에 추가 될 때 호출 될 이벤트 처리기
- 18. Hubtile이 "재설정 될 때"이미지 소스 변경
- 19. selectbox의 언어가 변경 될 때 jQuery 호출 함수
- 20. Struts에서 속성이 변경 될 때 비즈니스 로직을 호출 1.3
- 21. 변수가 변경 될 때마다 JavaScript에서 함수를 실행하는 방법은 무엇입니까?
- 22. ListView의 ItemsSource가 변경 될 때 발생하는 이벤트
- 23. UIWebView가 ScrollView 내부에로드 될 때 콘텐츠 변경
- 24. dealloc에서 super가 호출 될 때 중요합니까?
- 25. 모델의 메소드가 호출 될 때 인식되지 않습니다.
- 26. 클래스가 Java로로드 될 때 메소드 호출
- 27. alertbox가 호출 될 때 BACKKEY를 비활성화하는 방법
- 28. 스크립트가 종료 될 때 함수 호출
- 29. 서블릿이 호출 될 때 no 전달
- 30. 스레드 생성자가 호출 될 때 Segfault
아니요.하지만 접근자를 사용할 수 있습니다. –