Файл welcome.rb
содержит:
welcome_message = "hi there"
Но в IRB, я не могу получить доступ к переменной, которую я просто создал:
require './welcome.rb'
puts welcome_message
# => undefined local variable or method `welcome_message' for main:Object
Что лучший способ состоит в том, чтобы ввести предварительно определенные переменные, и работа инициализации сделали когда Вы require
что-то в Вашу сессию IRB? Глобальные переменные не походят на правильный путь.
Хотя это правда, что вы не можете получить доступ к локальным переменным, определенным в требуемых файлах, вы можете получить доступ к константам, и вы можете получить доступ ко всему, что хранится в объекте к которому у вас есть доступ в обоих контекстах. Итак, есть несколько способов поделиться информацией, в зависимости от ваших целей.
Наиболее распространенным решением, вероятно, является определение модуля и размещение в нем вашего общего значения. Поскольку модули являются константами, вы сможете получить к ним доступ в требуемом контексте.
# in welcome.rb
module Messages
WELCOME = "hi there"
end
# in irb
puts Messages::WELCOME # prints out "hi there"
Вы также можете поместить значение внутри класса, чтобы добиться того же эффекта. В качестве альтернативы вы можете просто определить его как константу в файле.Поскольку контекст по умолчанию - это объект класса Object, называемый main, вы также можете определить метод, переменную экземпляра или переменную класса в main. Все эти подходы в конечном итоге оказываются существенно разными способами создания «глобальных переменных» в большей или меньшей степени и могут не быть оптимальными для большинства целей. С другой стороны, для небольших проектов с четко определенными масштабами они могут подойти.
# in welcome.rb
WELCOME = "hi constant"
@welcome = "hi instance var"
@@welcome = "hi class var"
def welcome
"hi method"
end
# in irb
# These all print out what you would expect.
puts WELCOME
puts @welcome
puts @@welcome
puts welcome
Это должно по крайней мере, включите опыт irb:
def welcome_message; "hi there" end
Вы не можете получить доступ к локальным переменным, определенным во включенном файле. Вы можете использовать ivars:
# in welcome.rb
@welcome_message = 'hi there!'
# and then, in irb:
require 'welcome'
puts @welcome_message
#=>hi there!
Я думаю, что лучший способ - определить такой класс
class Welcome
MESSAGE = "hi there"
end
, тогда в irb вы можете вызвать свой код следующим образом:
puts Welcome::MESSAGE