我试图在Rails 3.2.6 / Ruby 1.9.3控制台中使用y对象,为ActiveRecord对象获得格式良好的yaml输出,但由于某种原因,它不适用于我.我曾经使用过它,但在某种程度上破坏了它.当我尝试以下输出时:
NameError:未定义的局部变量或方法`yaml’for main:Object
解决方法
y方法实际上是由
Syck YAML parser/emitter建立的内核对象的扩展.这是lib / ruby / 1.9.1 / syck.rb的最后几行:
module Kernel def y( object,*objects ) objects.unshift object puts( if objects.length == 1 YAML.dump( *objects ) else YAML.dump_stream( *objects ) end ) end private :y end
默认情况下,Ruby 1.9.3使用Psych parser/emitter而不是Syck(我只能假设它们的发音方式不同),而Psych并没有声明这种方法.
如果你真的喜欢y,你可以在控制台中简单地使用Syck而不是Psych:
Loading development environment (Rails 3.2.5) 1.9.3p194 :001 > y 'hello' NoMethodError: undefined method 'y' for main:Object 1.9.3p194 :002 > YAML::ENGINE.yamler = 'syck' "syck" 1.9.3p194 :003 > y 'hello' --- hello nil
我也会用这个机会来插上awesome_print,它基本上是YAML所做的一切.