ruby-on-rails - 字符串上的 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
解决方案
不知何故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"
推荐阅读
- javascript - 使用Javascript onClick执行PHP函数而不刷新页面
- python - 在Python中将逗号分隔的字符串拆分为列表中的字符串
- excel - 导致计算机崩溃的简单 Powershell 函数
- vue.js - 无法读取未定义的属性“推送”-vue 和 axios
- python - 当错误达到5时,这段代码继续运行,而错误停滞在5,这是为什么呢?
- codeigniter - 转义 html 所有发布的值
- css - 防止浮动图像旁边的包装文本“碎片化”
- indexing - 如何使用 `GROUP BY` 加快查询速度?
- c# - .Net Core 中的操作系统特定代码?
- excel - 不重复 - 从 IE 下载文件后如何在 Window Explorer 中设置文件路径