Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby-YAML::load_Ruby On Rails_Ruby_Yaml - Fatal编程技术网

Ruby on rails Ruby-YAML::load

Ruby on rails Ruby-YAML::load,ruby-on-rails,ruby,yaml,Ruby On Rails,Ruby,Yaml,我试图修改内置时间戳格式的默认反序列化,以影响Ruby的时间 我使用散列(成功)完成此操作: YAML::add_domain_type('yaml.org,2002', 'map') { |t, v| nil } YAML::add_domain_type('ruby.yaml.org,2002', 'hash') { |t, v| nil } hash = { :hello => :world } puts YAML::load(hash.to_yaml) # nil 但当我尝试同样

我试图修改内置时间戳格式的默认反序列化,以影响Ruby的时间

我使用散列(成功)完成此操作:

YAML::add_domain_type('yaml.org,2002', 'map') { |t, v| nil }
YAML::add_domain_type('ruby.yaml.org,2002', 'hash') { |t, v| nil }
hash = { :hello => :world }
puts YAML::load(hash.to_yaml) # nil
但当我尝试同样的方法时,它不起作用:

YAML::add_domain_type('yaml.org,2002', 'timestamp') { |t, v| nil }
YAML::add_domain_type('ruby.yaml.org,2002', 'time') { |t, v| nil }
puts YAML::load(Time.now.to_yaml).class # 'Time'
任何帮助都将不胜感激。谢谢

如果您使用的是Psych(ruby 1.9.3p194中的YAML),那么您需要在Time类上定义一个
encode_with/1
方法

require 'yaml'

class Time
  def encode_with(coder)
    coder.tag = '!ruby/time'
    coder.scalar = to_s
  end
end

YAML::add_domain_type('ruby.yaml.org,2002', 'ruby/time') { |t, v| "HELLO!!" }

yaml = YAML.dump(Time.new)  # -> "--- !ruby/time 2012-10-25 14:18:59 -0400\n...\n"
YAML.load(yaml)  # -> "HELLO!!"
如果对象上定义了
encode_with/1
方法,则Psych调用该方法,并传入
Psych::Coder
类的实例;否则,它将调用
YAMLTree
类中的
visit#{o.class}
方法,在
visit_Time
的情况下,该方法不会序列化任何标记信息


第一行的目的是什么,
YAML::add_domain_type('YAML.org,2002,'map'){| t,v | nil}
因为如果删除它,哈希也不起作用。我不确定它是否相关,但YAML无法根据对的引用往返时间对象。