Ответ 1
Я обычно использую
if __FILE__ == $0
x = SweetClass.new(ARGV)
x.run # or go, or whatever
end
Итак, да. Это просто зависит от того, что вы делаете.
В python модуль не должен иметь основную функцию, но обычно используется следующая идиома:
def my_main_function():
... # some code
if __name__=="__main__": # program entry point
my_main_function()
Я знаю, что Ruby не должен иметь метод main
, но есть ли какая-то лучшая практика, которой я должен следовать? Должен ли я назвать мой метод main
или что-то еще?
страница Википедии об основных методах на самом деле не помогает мне.
В качестве побочной заметки я также видел следующую идиому в python:
def my_main_function(args=[]):
... # some code
if __name__=="__main__": # program entry point
import sys
sys.exit(my_main_function(sys.argv))
Я обычно использую
if __FILE__ == $0
x = SweetClass.new(ARGV)
x.run # or go, or whatever
end
Итак, да. Это просто зависит от того, что вы делаете.
Я всегда считал $PROGRAM_NAME
более читаемым, чем использование $0
. Половина времени, когда я вижу такие глобальные глобулы, подобные Perl, я должен искать их.
if __FILE__ == $PROGRAM_NAME
# Put "main" code here
end
Вы должны поместить библиотечный код в lib/и исполняемые файлы, которые требуют библиотечного кода, в bin/. Это имеет дополнительное преимущество в отношении совместимости с методом упаковки RubyGems.
Общим шаблоном является lib/application.rb(или предпочтительно имя, которое более подходит для вашего домена) и bin/application, которое содержит:
require 'application'
Application.run(ARGV)
Мое личное эмпирическое правило: момент
if __FILE__ == $0
<some code>
end
получает больше 5 строк, я извлекаю его в функцию main
. Это справедливо для кода Python и Ruby. Без этого кода выглядит плохо структурированным.
Нет.
Зачем добавлять дополнительный уровень сложности без реальной выгоды? Там нет конвенции для рубистов, которые ее используют.
Я бы подождал, пока второй раз вам понадобится его использовать (что, вероятно, произойдет реже, чем вы думаете), а затем реорганизовать его так, чтобы он был повторно использован, что, вероятно, будет включать конструкцию, подобную приведенной выше.