배열처럼 작동하는 클래스를 디자인하고 싶습니다. 그러나 한 세트의 데이터를 다른 세트와 분리하여 특정 작업이 다른 집합입니다. 이것을하는 좋은 방법은 무엇입니까?다른 소스의 데이터를 가져 오는 사용자 정의 배열 유형 객체
내 디자인은 데이터의 초기 집합을 하나의 배열에 저장하고이 개체에 추가되는 모든 새 요소를 다른 배열에서 별도로 추적 ("추가"데이터라고 함)합니다.
이 클래스의 개체에서 항목을 추가하고 삭제하면 새 요소 만 작동하며 모든 요소는 초기 요소와 새 요소의 조합에 대해 수행됩니다.
이 개체의 요소 색인은 두 배열을 연결 한 요소의 색인이므로 초기 데이터에 3 개의 요소가 있고 여분의 배열에 4 개의 요소가있는 경우 추가 배열의 첫 번째 요소가 반환됩니다 초기 배열의 첫 번째 요소는 그림을 위해 0
의 인덱스를 반환하면서 3의 인덱스이는
이class MyClass
def initialize(base_data)
@base_elements = base_data # this is an array
@extra_elements = [] # this stores the "new" data
end
def add(elem)
@extra_elements << elem
end
def delete(elem)
@extra_elements << elem
end
def all_elements
@base_elements.concat(@extra_elements)
end
def find(elem)
all_elements.find(...)
end
def index (elem)
all_elements.index(...)
end
end
이상적으로, 이것은 모두를 지원해야 코드에서 볼 수있는 방법입니다 Enumerator
에 정의 된 방법, 예컨대 each
, inject
등
내가 그러나 내가 만약 내가 그때 할 수 확실하지 않다, 열거 가능한 모듈을 포함하여 생각하고 있었는데 서로 다른 메소드를 모두 오버라이드하지 않고 열거 형으로 처리하여 두 배열을 처리하도록합니다. – MxyL
'Enumerable'은'each' 메소드의 관점에서 다양한 메소드를 정의합니다. Alex는'all_elements'를 사용하는'each' 메소드를 정의 했으므로,'Enumerable' 메소드는 모두'all_elements'를 사용합니다. – georgebrock