내가 다른 접근에 의해 반환되는 사용자 정의 객체 (공룡, cacemen 등)의 일부 배열을 포함하는 클래스 game
이 같은 game.dinosaurs
, 현재 등 game.cavemen
루비 사용자 정의 반복자
,이 모든 접근 그냥 내부적으로 저장된 배열을 반환합니다. 그러나 이제는 game.dinosaurs.each_carnivore { ... }
등의 코드를 each_element
및 each_attr
반복자와 비슷하게 작성하려면 LibXML::XML::Node
에있는 이러한 접근 자에 의해 반환 된 이러한 배열에 사용자 지정 반복 메서드를 추가하고 싶습니다. 그러나 내 접근 자 game.dinosaurs
및 game.cavemen
에서 반환 된 객체는 여전히 배열처럼 동작해야합니다.
루비에서는 일반적으로 어떻게됩니까? 접근 자에서 반환 된 객체를 Ruby의 Array
클래스에서 파생 된 사용자 정의 클래스로 설정해야합니까? 또는 Enumerable
이 포함 된 맞춤 클래스를 작성해야합니까?
나는 내 컬렉션에 외부 map
또는 select
을 사용할 수 있습니다 알고,하지만 난 내 클래스의 사용자가 내부 배열에서만 육식 공룡을 선택하는 반복을 설정하는 방법을 귀찮게 할 필요가 없습니다 것을 내부적으로 이러한 반복을 캡슐화하고 싶어 .
편집 : 내가 반복자를 사용하거나 구현하는 방법을 방법에 대해 물어 아니지만, 어떻게 이전에 그냥 일반 배열 된 객체 단지 일부 사용자 지정 반복자를 추가하는 (그리고 여전히 필요).
내가 [루비에서 실제 객체 지향 디자인] 생각 (http://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330) , 8 장은 문제를 정확히 해결하고 몇 가지 옵션을 제시하지만 모든 경우에 적합한 해결책은 없습니다. 이 책을 읽어야합니다 (좋은 소식입니다). 프로젝트에 적합한 아이디어를 찾아야합니다. –