Range
Rails コンテキストで、YAML を使用してruby をシリアライズする必要があります。整数の範囲と文字列の範囲が正しくシリアル化されているかどうかを確認したかったのです。
これが私のテストでした:
# classic irb
require 'yaml' # => true
YAML::VERSION # => "0.60"
YAML.dump(1..2) # => "--- !ruby/range \nbegin: 1\nend: 2\nexcl: false\n"
YAML.dump("1".."2") # => "--- !ruby/range \nbegin: \"1\"\nend: \"2\"\nexcl: false\n"
2 つの出力は厳密に区別されているので、先に進み、Rails アプリケーション内でコーディングしました。
しかし、Rails コンテキスト内では、Ruby は整数の範囲を適切にシリアライズする方法を忘れているようです!
# ./script/rails console
Rails::VERSION::STRING # => "3.0.15"
RUBY_VERSION # => "1.8.7"
YAML::VERSION # => "0.60"
YAML.dump(1..2) # => "--- !ruby/range\n begin: 1\n end: 2\n excl: false"
YAML.dump("1".."2") # => "--- !ruby/range\n begin: 1\n end: 2\n excl: false"
# The two outputs are identical, the distinction between integers and strings is lost!
ruby と ruby on rails はどちらも同じバージョンの YAML ライブラリを使用しているようです。誤解がなければ、私のバージョンの Ruby は複数のコーダー エンジン間の切り替えをサポートしていません。
いくつかの質問を聞きたいんです:
- この違いの原因は何ですか?
- この問題は、新しいバージョンのruby / railsで発生しますか?
- どうすれば互換性のある方法で適切に修正できますか?
ご協力ありがとうございました。