Ruby gem을 사용하여 명령 행 유틸리티 (foo
)의 기능을 래핑하려고합니다. 일부 기능을 다른 클래스로 추상화하려고 시도하지만 한 곳에서 응용 프로그램의 오류를 처리 할 수 있도록 한 가지 방법으로 시스템을 호출하는 논리를 갖고 싶습니다.모듈 클래스를 통해 액세스 할 수있는 개인 모듈 메서드
난 쉽게 할 수있는 셔틀이 방법을 통해 실행 호출 후 보석
module Foo
def self.execute(*args)
exec('foo', *args)
# Pretend there is a lot more error handling etc. here
end
end
과의 주요 모듈에 방법을 정의하여 각 클래스를이 작업을 수행 할 수 있습니다
module Foo
class Bar
# Access via class method
def self.list_bars
Foo.execute('ls', 'bars')
end
# Access via instance method
def initialize
# Make a call to the system executable via the class method
Foo.execute('initialize', 'bar')
end
def config(*args)
Foo.execute('config', 'bar', *args)
end
end
end
이상적 그래도 Foo.execute
메소드 을 개인으로 만들고 싶습니다. 따라서 내 모듈의 공개 API는 단지 foo
의 추상화입니다. Foo.execute
을 private
으로 표시하면 모듈의 다른 클래스 (분명히)에서 액세스 할 수 없습니다.
어떻게 Ruby 2.3에서이를 간결하게 처리 할 수 있습니까?
네임 스페이스 목적으로 모듈 Foo
만 사용한다는 점도 유의해야합니다.
'private'및 'protected'는 클래스 환경에서 더 잘 작동합니다. 모듈은 같은 방식으로 상속되지 않으므로 제한이 훨씬 엄격합니다. – tadman