Подтвердить что ты не робот

Должен ли я определить основной метод в моих рубиновых скриптах?

В 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))
4b9b3361

Ответ 1

Я обычно использую

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

Итак, да. Это просто зависит от того, что вы делаете.

Ответ 2

Я всегда считал $PROGRAM_NAME более читаемым, чем использование $0. Половина времени, когда я вижу такие глобальные глобулы, подобные Perl, я должен искать их.


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

Ответ 3

Вы должны поместить библиотечный код в lib/и исполняемые файлы, которые требуют библиотечного кода, в bin/. Это имеет дополнительное преимущество в отношении совместимости с методом упаковки RubyGems.

Общим шаблоном является lib/application.rb(или предпочтительно имя, которое более подходит для вашего домена) и bin/application, которое содержит:

require 'application'
Application.run(ARGV)

Ответ 4

Мое личное эмпирическое правило: момент

if __FILE__ == $0
    <some code>
end

получает больше 5 строк, я извлекаю его в функцию main. Это справедливо для кода Python и Ruby. Без этого кода выглядит плохо структурированным.

Ответ 5

Нет.

Зачем добавлять дополнительный уровень сложности без реальной выгоды? Там нет конвенции для рубистов, которые ее используют.

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