String
에 몇 가지 새로운 메서드를 정의하려고합니다. 이 메소드가 다른 라이브러리에 정의 된 메소드와 충돌하지 않도록해야합니다 (참조 용으로, 굴곡자를 작성한 후 String
에 pluralize
및 singularize
추가). 내 첫번째 생각네임 스페이스에서 문자열에 메서드 추가
그래서 같은 모듈에 새로운 물건을 포장했다 :
이module MM
class String
def rev
self.split('').reverse.join('')
end
end
end
class Test
include MM
def me(s)
s.rev
end
end
puts Test.new.me('this is a test')
그러나 물론이 작동하지 않습니다. String#rev
은 정의되지 않은 상태로 유지됩니다. 내 코드에서 실제로 가지고있는 것은 모듈 MM
이고 내장형 확장을 제외한 모든 것은 MM
에 싸여있다. 내 목표는 String
에 rev
, singularize
및 pluralize
과 같은 메서드가 있지만 해당 모듈 내부에만 MM
인 방법을 사용하는 것입니다.
이것은 할 수있는 것처럼 보입니다. 그러나 어쨌든 나는 그렇게 할 수있는 비밀 주문을 놓치고있다.
누구나 제안 할 수 있다면 많은 도움이 될 것입니다.
나는 완전히 이해하지 못한다. 자신의 클래스 내에서만 String을 확장하고 싶습니까? –
내 모듈에서만. 이 구현을 다른 구현으로 돌리는 것을 피하기 만하면됩니다. 문제를 해결하기 위해 이름을 바꿀 수 있지만이 이름 공간은 디자인 된 것처럼 보입니다. –
"관심사"가 무엇을 위해 설계 되었습니까? 동적으로 클래스 내에서 메소드를 정의/정의 해제하는 것은 약간 다릅니다. 모듈에서 메소드를 정의하고 특정 범위 내에서 사용할 수있는 메소드 만 갖는 것과는 다른 String에 넣으려는 경우. –