다른 것들 중에서도, 그것을 혼합하는 클래스에 일반적인 'finder'타입의 기능을 추가 할 모듈을 만들고 있습니다. 문제 : 편의성과 미학을 이유로 외부에 기능을 클래스 자체와 동일한 범위에 포함하고자합니다. 예를 들어모듈 내에서 클래스의 포함하는 네임 스페이스에 액세스하기
: 나는 이러한 방법, 아무 문제 내에서 기능 을 할 수
class User include MyMagicMixin end # Should automagically enable: User.name('Bob') # Returns first user named Bob Users.name('Bob') # Returns ALL users named Bob User(5) # Returns the user with an ID of 5 Users # Returns all users
. 케이스 1 (User.name('Bob')
)은 쉽습니다. 그러나 케이스 2-4는 User
외부에 새로운 클래스와 메소드를 생성 할 수 있어야합니다. Module.included
메서드를 사용하면 클래스에 액세스 할 수 있지만 포함하는 범위에는 액세스 할 수 없습니다. Class 나 Module에서 볼 수있는 간단한 "부모"유형 메서드는 없습니다. (네임 스페이스의 경우 내 말은 슈퍼 클래스도 중첩 모듈이 아니더라도) 가장 좋은 방법은 클래스의 #name
에있는 일부 문자열 구문 분석을 사용하여 네임 스페이스를 제거한 다음 해당 문자열을 다시 일정한. 하지만 그건 루머스럽고 루비라는 점을 감안할 때 좀 더 우아한 방법이 있어야한다고 생각합니다.
아이디어가 있습니까? 아니면 나는 단지 내 자신의 이익을 위해 너무 똑똑한가?
** 업데이트 : ** J (Jörg, James and Jrallison)의 의견을 바탕으로 나는이 사실을 나쁜 생각으로 결정했으며 내 의미를 다른 방식으로 달성하려고합니다. 원한다면 답변하고 댓글을 달아주세요.하지만 지금은 지적 운동입니다. 필요한 것이 아닙니다. 여러분 모두에게 감사드립니다. – SFEley