변수가 nil
대신 초기화되지 않으면 다른 것을 반환하려고한다고 말하십시오. 이것이 가능한가? 클래스별로 오버로드하고 싶습니다.Ruby에서 인스턴스 변수 조회를 무시할 수 있습니까?
(이유는 주로 미친 속임수로 놀기 때문입니다).
변수가 nil
대신 초기화되지 않으면 다른 것을 반환하려고한다고 말하십시오. 이것이 가능한가? 클래스별로 오버로드하고 싶습니다.Ruby에서 인스턴스 변수 조회를 무시할 수 있습니까?
(이유는 주로 미친 속임수로 놀기 때문입니다).
당신이 경우 래퍼 방법을
def something
@var || "your default"
end
가능하다면 인스턴스 변수 조회 (자동 조회, 할당은 중요하지 않습니다) –
에 대해 자동으로 수행하고 싶습니다. 사용 중이어야합니다 @ setter가 아니야 –
을 쓸 수, 당신은 #instance_variable_defined?
및 #instance_variable_get
를 사용할 수 있습니다. 예를 들어 :
class Thing
def method_missing(method, *args, &block)
ivar_name = "@#{method}".intern
if instance_variable_defined? ivar_name
instance_variable_get ivar_name
else
super method, *args, &block
end
end
end
자동으로 설정 인스턴스 변수에 대한 예 변수 독자를 정의하거나 것이다 다음 IVARS
일정에 명명 된 인스턴스 변수가 기본값으로 디폴트 경우
class Thing
IVARS = [:@first, :@second]
def method_missing(method, *args, &block)
ivar_name = "@#{method}".intern
if IVARS.include? ivar_name
if instance_variable_defined? ivar_name
instance_variable_get ivar_name
else
"your default"
end
else
super method, *args, &block
end
end
end
어떤을 위해 독자를 정의 할 값. 인스턴스 변수 이름을 해쉬 매핑 값으로 변경하는 방법을 알 수있을 것입니다.
또는이보다 더 많은 유연성이 필요하지 않은 경우 당신은 단순히 디폴트 값을 제공하기 위해 instance_variable_get
을 사용할 수 독자 방법을 정의하지 않을이 비록
thing = Thing.new
thing.instance_variable_get :@ivar_name, "your default"
을 - 당신은 instance_variable_get
각을 통해 접근해야 할 것입니다 시각.
내가보고있는 동작은 정의되지 않은 속성에 액세스하려고 시도 할 때 method_missing이 호출되지 않는다는 것이며, 가로 채지 않고 Nil로 직접 평가하는 것입니다. 내가 놓친 게 있니? –
가능한 복제본 : [Ruby에는 정의되지 않은 인스턴스 변수에 대해 method_missing equivalent가 있습니까?] (http://stackoverflow.com/questions/7651213/does-ruby-have-a-method-missing-equivalent-for-undefined- 인스턴스 변수) – rdvdijk
프로덕션 환경에서 이것을 사용할 계획이 없습니다. –