dis*_*ted 15 ruby variables load scope local
如何在Ruby中完成这个简单的任务?
我有一些简单的配置文件
=== config.rb
config = { 'var' => 'val' }
Run Code Online (Sandbox Code Playgroud)
我想从文件中定义的某个方法加载配置文件,main.rb以便局部变量config.rb成为该方法的本地变量.
像这样的东西:
=== main.rb
Class App
def loader
load('config.rb') # or smth like that
p config['var'] # => "val"
end
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用全局变量config.rb,然后在完成后取消定义它们,但我希望有一种红宝石方式)
Dar*_*win 12
配置文件.
{ 'var' => 'val' }
Run Code Online (Sandbox Code Playgroud)
加载配置文件
class App
def loader
config = eval(File.open(File.expand_path('~/config.rb')).read)
p config['var']
end
end
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,对于配置,最好使用YAML或JSON.评估文件
binding.eval(File.open(File.expand_path('~/config.rb')).read, "config.rb")binding.eval(File.read(File.expand_path('~/config.rb')), "config.rb")
此语法允许您在回溯中查看重要的文件名.参见api docs [1].
更新了eval命令以避免FD(文件描述符)泄漏.我一定是在睡觉,或者应该在晚上的那个时候睡觉,而不是在stackoverflow上写.
[1] http://www.ruby-doc.org/core-1.9.3/Binding.html
你肯定可以使用eval和File.read来解决一个解决方案,但事实上这很难,应该会给你一个信号,告诉你这不是类似ruby的方法来解决你遇到的问题.两种替代设计将使用yaml作为配置api,或定义一个简单的dsl.
YAML案例是最简单的,你在main.rb中只需要这样的东西:
Class App
def loader
config = YAML.load('config.yml')
p config['var'] # => "val"
end
end
Run Code Online (Sandbox Code Playgroud)
你的配置文件看起来像:
---
var: val
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9967 次 |
| 最近记录: |