Эквивалентно 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