[python] `if __name__ == ‘__main __’`루비에서 동일

저는 Ruby를 처음 사용합니다. 별도로 계속 사용하려는 도구가 포함 된 모듈에서 함수를 가져 오려고합니다. 파이썬에서는 간단히 이렇게합니다.

def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()

이 날 프로그램을 실행하거나 사용하는 모듈로 가져올 수 있습니다 a()및 / 또는 b()별도. Ruby에서 동등한 패러다임은 무엇입니까?



답변

내가 야생에서 본 Ruby에서 (톤이 아니라 허용) 이것은 표준 Ruby 디자인 패턴이 아닙니다. 모듈과 스크립트는 분리되어 있어야하므로이 작업을 수행하는 훌륭하고 깨끗한 방법이 없다고해도 놀라지 않을 것입니다.

편집 : 찾았습니다.

if __FILE__ == $0
    foo()
    bar()
end

그러나 그것은 확실히 일반적이지 않습니다.


답변

스택 트레이스가 비어 있으면 오른쪽과 왼쪽으로 실행할 수 있습니다. 약 1 주일 동안 Ruby를 사용했기 때문에 그것이 관습 적으로 사용되는지 또는 비 관습 적으로 사용되었는지 모르겠습니다.

if caller.length == 0
  # do stuff
end

개념의 증거:

파일 : test.rb

#!/usr/bin/ruby                                                                 

if caller.length == 0
  puts "Main script"
end

puts "Test"

파일 : shmest.rb

#!/usr/bin/ruby -I .                                                            

require 'test.rb'

puts "Shmest"

용법:

$ ./shmest.rb
Test
Shmest

$ ./test.rb
Main script
Test


답변

if $PROGRAM_NAME == __FILE__
  foo()
  bar()
end 

Rubocop 이 이것 보다 선호 합니다.

if __FILE__ == $0
    foo()
    bar()
end


답변