2016-05-12 44 views
-2

從_why的書中學習Ruby,我嘗試重新創建他的代碼,但它不起作用。require_relative不拉動變量?

我有一個world.rb文件;

puts "Hello World" 

Put_the_kabosh_on = "Put the kabosh on" 
code_words = { 
    starmonkeys: "Phil and Pete, thouse prickly chancellors of the New Reich", 
    catapult: "Chunky go-go", 
    firebomb: "Heat-Assisted Living", 
    Nigeria: "Ny and Jerry's Dry Cleaning (with Donuts)", 
    Put_the_kabosh_on: "Put the cable box on" 
} 

而在我的其他文件,pluto.rb;

require_relative "world" 

puts "Hello Pluto" 
puts code_words[:starmonkeys] 
puts code_words[:catapult] 
puts code_words[:firebomb] 
puts code_words[:Nigeria] 
puts code_words[:Put_the_kabosh_on] 

我知道我的require_relative的作品,因爲如果我不散列部(只是把"Hello World")運行pluto.rb,您好世界獲取打印!

+0

如果你expectecting的code_words局部變量pluto.rb存在,那麼它不會。這是要求(_relative)工作的方式 –

+0

您的問題是什麼? – sawa

+0

在一個Rails應用程序中,你應該把它們放在一個YAML文件中。看看http://guides.rubyonrails.org/i18n.html – Stefan

回答

2

局部變量是本地變量:它們不能在require之間生存。全局變量($code_words),常量(CODE_WORDS)和實例變量(@code_words)都可以。類變量(@@code_words)也可以,但會收到警告。其中,常數是最不臭的;但它會更好,如果你把它們放在一個模塊中它們的命名應該:

module World 
    CODE_WORDS = { ... } 
end 

pluto.rb

require_relative "world" 
puts World::CODE_WORDS[...]