2016-10-31 2 views
-2

Я разработал набор рубиновых скриптов. Каждый из них должен быть «самодостаточным», поэтому пользователь может запускать его самостоятельно. Но также я хотел бы использовать их для создания других скриптов, я имею в виду, например, использовать его методы, а также запускать его в целом, не делая `script.rb`.Scripting in Ruby

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

Мой вопрос: что мне теперь делать, чтобы каждый сценарий был автономным, а также позволял другим скриптам использовать его? Должен ли каждый скрипт содержать класс с основным методом, который я бы запускал object.main?

Или, может быть, мой подход к написанию простых сценариев, никаких классов тоже хорош?

Если я начинаю новый сценарий, должен ли я всегда идти объективным путем?

+0

Ваш вопрос имеет два несвязанных вопросов в нем. Пожалуйста, прочитайте «[ask]». ЕСЛИ вопросы тесно связаны, они были бы более приемлемыми, но несвязанные вопросы уменьшали эффективность вашего вопроса, помогая другим. –

ответ

1

Когда я пишу один скрипт, я часто переношу его в класс. Вы указали на некоторые преимущества этого, включая повторное использование и более чистую документацию.

Я нахожу, что для скриптов существует несколько уровней полировки в зависимости от того, как они будут использоваться. Если сценарий запускается один раз и никогда не используется снова, я не могу обернуть его в класс. Если это важно (с использованием резервных копий производственных систем), возможно, стоит положить его в полную форму и написать тесты. Где-то посередине один класс. Как правило, это означает, что вы берете код, который не находится в методе, и помещаем его в конструктор класса.

Это:

#!ruby 

def amethod(i) 
    i+1 
end 

ARGF.each do |l| 
    if l.chomp.to_i > 0 
     puts amethod(l.chomp.to_i) 
    end 
end 

становится:

#!ruby 

class OneAdder 
    def amethod(i) 
     i+1 
    end 

    def initialize 
     ARGF.each do |l| 
      if l.chomp.to_i > 0 
       puts amethod(l.chomp.to_i) 
      end 
     end 
    end 
end 

OneAdder.new 
+0

Что было бы в вашем драгоценном камне? Только класс OneAdder или, может быть, целый набор классов? – damian