首页 > 解决方案 > 字符串上的 Ruby 封送处理与转换为字符串的符号上的封送处理不同

问题描述

在这两种情况下:

a = Marshal.dump(:rent_active_on.to_s)
b = Marshal.dump('rent_active_on')

a = Marshal.dump(String(:rent_active_on))
b = Marshal.dump(String('rent_active_on'))

a 不等于 b。最终值几乎相同:

 > a = Marshal.dump(:rent_active_on.to_s)
 => "\x04\bI\"\x13rent_active_on\x06:\x06EF" 
 > b = Marshal.dump('rent_active_on')
 => "\x04\bI\"\x13rent_active_on\x06:\x06ET"

不同的是最后一个字符。“F”与“T”。我找不到任何方法让它们产生相同的结果。我完全糊涂了……这是怎么回事?

使用 Ruby 2.6.1

标签: ruby-on-railsruby

解决方案


不知何故Marshal.dump(:rent_active_on.to_s)不会产生与 相同的输出Marshal.dump('rent_active_on'),但Marshal.dump("#{:rent_active_on}")会尝试插值:

Marshal.dump("#{:rent_active_on}") # "\x04\bI\"\x13rent_active_on\x06:\x06ET"
Marshal.dump('rent_active_on')     # "\x04\bI\"\x13rent_active_on\x06:\x06ET"

或者您可以改用符号:

Marshal.dump(:rent_active_on)         # "\x04\b:\x13rent_active_on"
Marshal.dump('rent_active_on'.to_sym) # "\x04\b:\x13rent_active_on"

推荐阅读