편리한 util 메서드를 사용하고 싶습니다. Enumerable
계약 (즉, each
구현)을 충족하지만 Enumerable
을 포함하지 않는 개체에 대해서는 특히 Enumerable#to_a
입니다.해당 믹스 인을 포함하지 않는 객체에서 믹스 인 메서드 호출
나는이 작동하는 것 같다 것을 알아 냈어요 :
Enumerable.instance_method(:to_a).bind(obj).call
그러나 이것은 정말 장황하고 해제 Rubyesque 것으로 보인다. 이 작업을 수행하는 더 나은/청소기/빠른 방법이 있습니까? 의도하지 않은 결과를 피하기 위해 기본 개체를 수정하지 않는 것이 좋습니다.
본질적으로, 나는 javascript의 apply
또는 call
을 찾고 있습니다.
편집 :이에 대한 나의 동기는 본질적으로 캡슐화 : 나는, 내가 작성하지 않은 클래스의 객체에이 작업을 수행하고 싶습니다, 정말 깊이 이해 할 필요가 없습니다 통제하지 않으며, 수도 자신의 메서드가 범용 구현으로 대체 될 가능성이있는 것에 심하게 반응합니다. Enumerable을 포함하는 것이 대부분의 경우에 잘 작동한다는 것을 알지만, 잘못 될 경우 디버깅하는 것이 쉽지 않기 때문에 침입하지 않고 mixin의 이점을 얻을 수있는 간단한 방법이 있다면 좋을 것입니다.
왜 당신은 그냥 고려하지 않고있다 Enumerable에서 포함 :
난 후 다음과 같은 것은 할 것? 그게 뭐가 잘못 됐어? –
클래스는 내가 제어하지 못하는 라이브러리의 일부이며 일반적으로 모범 사례로서 내부 구조가 엉망이되는 것을 최소화하고 싶습니다. 기본적으로 클래스의 기존 메서드를 덮어 쓰고 해당 클래스의 다른 소비자에게 영향을 미칠 이유는 없습니다. 내 말은, 그럴 가능성이별로 없다는 것입니다. 하지만 다른 방법이 있다면 위험이 모호한 이유는 무엇입니까? –