`if __name__ == '__main __' 'эквивалент в Ruby
Я новичок в Ruby. Я хочу импортировать функции из модуля, который содержит инструмент, который я хочу продолжать использовать отдельно. В Python я бы просто сделал это:
def a():
...
def b():
...
if __name__ == '__main__':
a()
b()
Это позволяет мне запускать программу или импортировать ее в качестве модуля для использования a()
и/или b()
отдельно. Какая эквивалентная парадигма в Ruby?
Ответы
Ответ 1
Из Ruby, который я видел в дикой природе (предоставленный, а не тонна), это не стандартный шаблон дизайна Ruby. Модули и сценарии должны оставаться отдельными, поэтому я не удивлюсь, если не будет хорошего и чистого способа сделать это.
EDIT: Найдено.
if __FILE__ == $0
foo()
bar()
end
Но это определенно не часто.
Ответ 2
Если трассировка стека пуста, мы можем начать выполнение вправо и влево. Я не знаю, использовал ли это традиционно или нетрадиционно, так как я нахожусь в Ruby около недели.
if caller.length == 0
# do stuff
end
Доказательство концепции:
file: test.rb
#!/usr/bin/ruby
if caller.length == 0
puts "Main script"
end
puts "Test"
file: shmest.rb
#!/usr/bin/ruby -I .
require 'test.rb'
puts "Shmest"
Использование:
$ ./shmest.rb
Test
Shmest
$ ./test.rb
Main script
Test