Ruby에서 사용자 정의 setter 및 getter 메소드를 작성하는 표준 방법이 궁금합니다. 일반적으로, 나는 attr_accessor
을 통해 이것을 할 것이지만 나는 DSL을 만드는 맥락에있다.Ruby를 하나의 메소드로 가져오고 설정하기
def duration(dur)
@duration = dur
end
그러나 이것은 게터 a를 구현한다 : 그들은 이런 식으로 구현해야,
work do
duration 15
priority 5
end
을 따라서하십시오 DSL에서 세터가 (지역 변수를 생성 할 =
기호를 사용)과 같이 호출 bit tricky : 같은 이름이지만 인자가없는 메소드를 만들면 setter를 덮어 씁니다.
def duration(dur=nil)
return @duration = dur if dur
return @duration if @duration
raise AttributeNotDefinedException, "Attribute '#{__method__}' hasn't been set"
end
이 그것에 대해 갈 수있는 좋은 방법입니다 :
그래서 나는 설정과 점점 둘 다 할 사용자 정의 방법을 썼다? 다음은 테스트 케이스와 요지는 다음과 같습니다감사합니다!
이것은 "영리한"것일 수 있지만 꽤 잘 알려진 관용어이며, 그래서 나는 그것을 코드 리뷰에서 확실히 슬라이드시킬 것이다. –
감사합니다. 이들은 훌륭한 아이디어입니다. 값을 0으로 설정하는 유스 케이스가 없지만 어쨌든 그것을 덮는 방법을 알고있는 것이 좋습니다. – abbottjam