Эквивалентно Perl Modulino для Ruby, Python?

Я знаю, что Perl имеет шаблон проектирования, известный как modulino, в котором файл модуля библиотеки может выступать в качестве библиотеки и script. Есть ли эквивалент этого в Ruby/Python?

Я думаю, что этот шаблон дизайна был бы очень полезен для меня; Я пишу работники, которые довольно короткие, но также требуют script для их запуска. Я думаю, было бы удобно, чтобы все это выполнялось с одного и того же места.

Спасибо!

Ответ 1

Python имеет __name__:

class MyClass(object):
    pass

if __name__ == '__main__':
    print("This will only run if you run the script explicitly, not import it")

Если вы запустите python myscript.py, запустится функция print. Если вы импортируете MyClass из myscript, print не будет.

Ответ 2

Это версия Ruby:

if __FILE__ == $PROGRAM_NAME #equivalent: if __FILE__ == $0
  puts "This is the main file running, it is not being required."
end

Ответ 3

В Perl 6 встроена эта функция. Вы определяете подпрограмму с именем MAIN, которая выполняется, если вы используете этот файл как script:

 sub MAIN { ... }

Подпись для MAIN указывает Perl 6, как анализировать параметры командной строки. Вы можете использовать multi-subs, и Perl 6 будет использовать ту, чья подпись соответствует. Вот пример из Сводка 6:

multi MAIN (Int $i) {...}   # foo 1
multi MAIN (Rat $i) {...}   # foo 1/2
multi MAIN (Num $i) {...}   # foo 1e6
multi MAIN ($i) {...}       # foo bar