2009-02-24 7 views
43

는 모듈 는 주요 기능을 가지고을 가지고 있지 않지만, 다음과 같은 관용구 사용하는 것이 일반적입니다하십시오 main을 가지고 내가 루비를 알고루비 스크립트에 main 메소드를 정의해야합니까? 파이썬에서

def my_main_function(): 
    ... # some code 

if __name__=="__main__": # program's entry point 
    my_main_function() 

을을하지 않습니다 방법 중 하나이지만, 내가 따라야하는 모범 사례가 있습니까? 내 방법을 main 또는 뭔가로 지정해야합니까?

Wikipedia page about main methods은 실제로 도움이되지 않습니다. 사이드 참고로


, 나는 또한 파이썬에서 다음과 같은 관용구를 보았다 : 나는 보통 그래서 그래, 당신이 할 수있는

if __FILE__ == $0 
    x = SweetClass.new(ARGV) 
    x.run # or go, or whatever 
end 

를 사용

def my_main_function(args=[]): 
    ... # some code 

if __name__=="__main__": # program's entry point 
    import sys 
    sys.exit(my_main_function(sys.argv)) 

답변

74

. 그것은 단지 당신이하는 일에 달려 있습니다.

+2

이 좋은 조언은 다음과 같습니다

일반적인 패턴은 포함 LIB/application.rb (또는 바람직 이름 도메인에 더 적합)와 빈/응용 프로그램입니다 독립형 실행 파일 및 라이브러리로 사용할 수 있습니다. –

+0

+1 멋지다. 나는 기본적으로 똑같은 방법으로 삶은 더 복잡한 방식을 가졌다. 나는 이것을 이것으로 바꿀 것이다. –

+0

ruby-prof 등을 사용하는 경우 조건부가 원하는대로 작동하지 않습니다. –

0

No.

실제 이점이 없기 때문에 여분의 레이어를 추가하는 이유는 무엇입니까? 루비 스트를 사용하는 관습은 없습니다.

두 번째로 사용할 필요가있을 때까지 기다렸다가 (아마 생각보다 자주 발생하지 않을 것입니다) 리팩토링하여 재사용이 가능하도록합니다. 위와 같은 구조가 필요할 것입니다. 엄지 손가락의

+4

장점은 파일이 라이브러리와 스크립트가 될 수 있다는 것입니다. 나는이 관용구를 항상 사용한다. – eremzeit

3

내 개인적인 규칙은 다음과 같습니다

if __FILE__ == $0 
    <some code> 
end 

5 개 라인보다 더 얻는 순간, 나는 main 기능에 압축을 풉니 다. 이것은 파이썬과 루비 코드 모두에 적용됩니다. 이 코드가 없으면 제대로 구성되지 않은 것입니다.

46

항상 $PROGRAM_NAME은 (는) $0보다 읽기 쉽습니다. "Perl과 같은"전역을 볼 수있는 시간의 절반은 그들을 찾아 봐야합니다.


if __FILE__ == $PROGRAM_NAME 
    # Put "main" code here 
end 
8

bin /에 라이브러리 코드가 필요한 실행 파일과 lib /에 라이브러리 코드를 넣어야합니다. 이것은 RubyGems의 패키징 방법과 호환된다는 추가적인 장점이 있습니다. , 파일이 방법 -

require 'application' 
Application.run(ARGV) 
+0

여기에 질문의 요점을 놓친 것 같아요 ... – Perry

+0

이것은 훌륭한 대답입니다. 스크립트를 ./bin에 놓고'#!/usr/bin/env ruby ​​'를 맨 위에 추가하십시오. 그런 다음 실행 가능하게 만든다 (chmod + x). 여러분은 잘 조직되고 이해하기 쉬운 것을 가지고있다. – mastaBlasta

관련 문제