문제

중간 크기(OO가 아닌) Perl 프로그램을 포팅하여 Ruby를 선택하려고 합니다.내 개인적인 관용구 중 하나는 다음과 같이 옵션을 설정하는 것입니다.

use Getopt::Std;
our $opt_v;  # be verbose
getopts('v');
# and later ...
$opt_v && print "something interesting\n";

Perl에서는 이를 악물고 $opt_v를 (효과적으로) 글로벌로 설정합니다.

루비에서는 거의 정확한 것과 동일합니다.

require 'optparse'
    opts.on("-v", "--[no-]verbose", TrueClass, "Run verbosely") {
        |$opt_verbose|
    }
    opts.parse!
end

여기서 $opt_verbose는 클래스가 액세스할 수 있는 전역입니다.그런 글로벌 플래그에 대해 수업에 알리는 것은 ...어 ...잘못된.이를 수행하는 OO 관용적 방법은 무엇입니까?

  • 메인 루틴이 모든 옵션 관련 항목을 처리하고 클래스가 처리 방법을 결정하는 항목을 반환하도록 하시겠습니까?
  • 클래스가 선택적 동작(예: 장황한 설명)을 구현하고 attr_writer 종류를 통해 모드를 설정하도록 합니까?

업데이트됨: optparse를 제안하는 답변에 감사드립니다. 하지만 그렇지 않다는 점을 더 분명히 했어야 했습니다. 어떻게 제가 묻고 있는 명령줄 옵션을 처리하기 위해서는 전역 프로그램 상태를 효과적으로 설정하는 명령줄 옵션과 이상적으로는 그러한 종류의 것과 독립적이어야 하는 클래스 간의 관계에 대해 더 자세히 설명해야 합니다.

도움이 되었습니까?

해결책

얼마전에 우연히 달려가서 이 블로그 게시물 (Todd Werth 작성) Ruby의 명령줄 스크립트에 대한 다소 긴 뼈대를 제시했습니다.그의 스켈레톤은 애플리케이션 코드가 인스턴스화된 애플리케이션 클래스에 캡슐화된 다음 애플리케이션 개체에서 "run" 메서드를 호출하여 실행되는 하이브리드 접근 방식을 사용합니다.이를 통해 옵션을 클래스 전체 인스턴스 변수에 저장할 수 있어 응용 프로그램 개체의 모든 메서드가 스크립트에서 사용될 수 있는 다른 개체에 노출되지 않고 해당 옵션에 액세스할 수 있습니다.

옵션이 하나의 개체에 포함되어 있고 attr_writers 또는 메서드 호출 시 옵션 매개 변수를 사용하여 관련 옵션을 추가 개체에 전달하는 이 기술을 사용하는 편이 나을 것입니다.이런 방식으로 외부 클래스에 포함된 모든 코드는 옵션 자체에서 격리될 수 있습니다. 즉, 기본 루틴 내에서 변수 이름 지정에 대해 걱정할 필요가 없습니다. thingy 옵션이 다음과 같이 설정된 경우 클래스 thingy.verbose=true attr_writer 또는 thingy.process(true) 부르다.

다른 팁

그만큼 선택 분석 라이브러리는 표준 배포판의 일부이므로 타사 자료 없이도 사용할 수 있습니다.

개인적으로 사용해본 적은 없지만 레일스는 그것을 광범위하게 사용하는 것 같습니다 그리고 rspec도 마찬가지, 내 생각엔 꽤 확고한 신뢰의 투표인 것 같아요

Rails의 이 예는 ' script/console 사용법을 꽤 쉽고 친절하게 보여주는 것 같아요

그만큼 첫 번째 히트 Google에서 "Ruby에서 명령줄 옵션 처리"에 관한 기사입니다. 매춘부 이 작업에 좋은 도구인 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top