Ruby 中的 YAML。 load 和 load_file 有什么区别?
YAML in Ruby. What is the difference between load and load_file?
我有这个 practice.yml 文件:
foo: whatever
bar:
-
fruit: apple
name: steve
sport: baseball
- more
-
python: rocks
perl: papers
ruby: scissorses
#load 和#load_file 之间有什么区别?
#load 似乎施展了魔法并接受了一个字符串:
pry(main)> YAML.load("'a'")
"a"
[11] pry(main)> YAML.load("a:1")
"a:1"
[12] pry(main)> YAML.load("-a")
"-a"
[13] pry(main)> YAML.load("[a]")
[
[0] "a"
]
[14] pry(main)> YAML.load("[a,bc]")
[
[0] "a",
[1] "bc"
]
而 load_file 似乎只获取了一个包含有效 yaml 的文件:
irb(main):002:0> YAML.load_file("practice.yml")
=> {"foo"=>"whatever", "bar"=>[{"fruit"=>"apple", "name"=>"steve", "sport"=>"baseball"}, "more", {"python"=>"rocks", "perl"=>"papers", "ruby"=>"scissorses"}]}
load_file 调用加载,如下所示:
def self.load_file(filename, options={})
if SafeYAML::MULTI_ARGUMENT_YAML_LOAD
File.open(filename, 'r:bom|utf-8') { |f| self.load(f, filename, options) }
else
# Ruby pukes on 1.9.2 if we try to open an empty file w/ 'r:bom|utf-8';
# so we'll not specify those flags here. This mirrors the behavior for
# unsafe_load_file so it's probably preferable anyway.
self.load File.open(filename), nil, options
end
end
现在 load() 的原型是
def self.load(yaml, filename=nil, options={})
所以基本上 load_file 在检查与 Ruby 1.9.2
相关的一些空文件情况后,打开文件名并将结果字符串传递给 load()
我有这个 practice.yml 文件:
foo: whatever
bar:
-
fruit: apple
name: steve
sport: baseball
- more
-
python: rocks
perl: papers
ruby: scissorses
#load 和#load_file 之间有什么区别?
#load 似乎施展了魔法并接受了一个字符串:
pry(main)> YAML.load("'a'")
"a"
[11] pry(main)> YAML.load("a:1")
"a:1"
[12] pry(main)> YAML.load("-a")
"-a"
[13] pry(main)> YAML.load("[a]")
[
[0] "a"
]
[14] pry(main)> YAML.load("[a,bc]")
[
[0] "a",
[1] "bc"
]
而 load_file 似乎只获取了一个包含有效 yaml 的文件:
irb(main):002:0> YAML.load_file("practice.yml")
=> {"foo"=>"whatever", "bar"=>[{"fruit"=>"apple", "name"=>"steve", "sport"=>"baseball"}, "more", {"python"=>"rocks", "perl"=>"papers", "ruby"=>"scissorses"}]}
load_file 调用加载,如下所示:
def self.load_file(filename, options={})
if SafeYAML::MULTI_ARGUMENT_YAML_LOAD
File.open(filename, 'r:bom|utf-8') { |f| self.load(f, filename, options) }
else
# Ruby pukes on 1.9.2 if we try to open an empty file w/ 'r:bom|utf-8';
# so we'll not specify those flags here. This mirrors the behavior for
# unsafe_load_file so it's probably preferable anyway.
self.load File.open(filename), nil, options
end
end
现在 load() 的原型是
def self.load(yaml, filename=nil, options={})
所以基本上 load_file 在检查与 Ruby 1.9.2
相关的一些空文件情况后,打开文件名并将结果字符串传递给 load()