Ruby 怎么调用 YAML.load 的对象的方法

goinaction · 2013年05月07日 · 最后由 goinaction 回复于 2013年05月08日 · 5722 次阅读

想从一个 yaml 文件得到一些信息,结果 load 之后发现不是 hash,是一个具体的对象实例

但是调用对象原来的方法会报这样的错误

NoMethodError: undefined method `host' for #YAML::Object:0xb70ce4fc

有什么方法可以调用这个对象原来的方法或者属性呢?

或者 YAML 就不该这么用?

我只是想获取文件里面的文本信息,能够将 yaml 文件强制读取为 hash 的方法也行

file = File.join(Rails.root, "lib", "categories.yml")
dates = YAML.load_file file

使用 load_file

#1 楼 @chucai load 和 load_file 的效果是一样的,这个我倒是试过了。 yaml 文件的第一行就是

--- ! ruby/object:Puppet::Transaction::Report

这个应该是 YAML 判断 load 对象类型的依据,我只想要一些文本信息,把! 后的都删除再 load 应该可以。

返回 #<YAML::Object> 可能是因为声明的 class 没载入, 你可以先 require 'puppet' 看看

#3 楼 @luikore require 'puppet’ 确实搞定了 不过我本地可能不会装 puppet,只是分析下报告,最后还是通过正则匹配去掉所有的 ! ruby/object 来搞定的,谢了😄

需要 登录 后方可回复, 如果你还没有账号请 注册新账号