사용자 지정 클래스와 함께 조합 메서드를 사용하려고합니다. 블록이있는 메서드의 래퍼
내 클래스는 다음과 같습니다 경우
...class MyClass
def initialize
@data = []
end
def to_a
@data
end
end
나는이 부를 수있는 ...
myobj = MyClass.new
myobj.to_a.combination(2) {|a,b| puts "#{a} #{b}" }
하지만 차라리이있을 거라고 ...
myobj.combination {|a,b| puts "#{a} #{b}" }
블록을 전달하면서 결합 메소드를 래핑하는 클래스 메소드를 작성하려고했습니다. 하지만 작동하지 않습니다.
def combination(&block)
@data.to_a.combination(2) block.call
end
또한 조합이 Array 클래스에 있고 Enumerable이 아닌 이유를 아는 사람이 있습니까? 나는 그곳에서 더 유용했을 거라고 생각했을거야.
클래스가 너무 많은 배열을 ressembles 경우, 왜 배열에서 상속하지? – tokland
"조합이 Array 클래스에 있고 Enumerable이 아닌 이유는 무엇입니까?" 요소의 조합을 만들기 위해서는 모든 요소가 미리 필요합니다. 그래서 Array에이 요소가 있어야하는 이유입니다. 따라서이 메서드는이 클래스에 있습니다. 물론 Enumerable 대신 내부적으로 배열 변환을 수행 할 수 있지만 devs는 이것이 더 명확 할 것이라고 생각합니다. – tokland
@tokland 나는 그것에 대해 생각했지만, 나는 모든 Array 메서드를 원하지 않았다. 또한이 문제를 해결하는 방법을 배우고 싶었습니다. 물론 – Craig552uk