Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > yamlライブラリ > YAMLモジュール > add_builtin_type

singleton method YAML.add_builtin_type

add_builtin_type(type_tag) {|type, val| ...} -> nil[permalink][rdoc]

yaml.org,2002ドメインに属しているクラスをYAMLに追加し そのクラスを見つけたときの操作を指定します。

[PARAM] type_tag:
加えるクラスを指定する。
[PARAM] type:
YAMLドメインとクラスの文字列
[PARAM] val:
YAMLデータ構造
require 'yaml'

str1=<<EOT
--- !ruby.yaml.org,2002/Rational 5/6
EOT
str2=<<EOT
--- !yaml.org,2002/Rational 3/4
EOT

p YAML.load(str1)
#=> #<YAML::DomainType:0x2b07528 @type_id="Rational", @domain="ruby.yaml.org,2002", @value="5/6">

p YAML.load(str2)
#=> #<YAML::DomainType:0x2b0767c @type_id="Rational", @domain="yaml.org,2002", @value="3/4">

YAML.add_builtin_type("Rational"){|type, val|
  md = val.split(/\//)
  Rational.new!(md[0].to_i, md[1].to_i)
}

p YAML.load(str1)
#=> #<YAML::DomainType:0x2b06fec @type_id="Rational", @domain="ruby.yaml.org,2002", @value="5/6">
## 前回と変化なし

rt = YAML.load(str2)
p rt        # => Rational(3, 4)
p rt + 0.25 # => 1.0