0
는 내가 latitude
및 longitude
방법을 구현하는 모델까지의 거리와 관련된 방법을 제공하는 Module
이름 Coordinated
있습니다.모델이 포함 된 클래스가 특정 메소드를 구현하도록 요구하려면 어떻게해야합니까?
module Coordinated
...
def crow_flies_to(place)
raise ArgumentError, "place does not implement latitude and longitude" unless is_coordinated?(place)
Math.sqrt((latitude - place.latitude).abs**2 + (longitude - place.longitude).abs**2)
end
def is_coordinated?(place)
place.respond_to?(:latitude) && place.respond_to?(:longitude)
end
...
end
나는 클래스가로드 될 때 Coordinated
가 포함되는 클래스가 필요한 메소드를 구현하는지 테스트하고 싶습니다. 어떻게해야합니까?
완벽한 답변. 감사. – barelyknown
이것은 또한이 기능을 투명하게 구현하는 대신 다른 개체에 투명하게 위임 한 개체와 함께이 mixin을 사용할 수 없음을 의미합니다. 물론 객체 지향 프로그래밍에서 강력한 기술입니다. 실제로 질문하는 사람에 따라 기능 수행을 구분하고 다른 사람에게 위임하는 기능을 구분할 수 없다는 것이 객체 지향의 * 정의 *입니다. IOW :이 솔루션은 객체 지향을 사용하지 못하게합니다. –
@ JörgWMittag 오 이런 일이 처음에는 꽤 심술 궂은 생각이라고 생각합니다. 메소드가 그것을 사용하려고 시도 할 때까지는 모듈이주의를 기울여서는 안된다. 이것은 또한'method_missing'을 통해서만 존재하는 메소드들과 같은 것들을 위해 깨질 것입니다. –