gpt4 book ai didi

ruby - 带有命名键的百分比格式字符串不接受带有字符串键的散列?

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:51 27 4
gpt4 key购买 nike

我正在使用百分比字符串格式,如下所示:

'fetching imap (%<host>s/%<user>s port=%<port>s...' % options

options 散列有符号键 { host: 'example.com' } 时,这工作正常,但当它引发 KeyError 时有字符串键 { 'host' => 'example.com' }:

KeyError: key<host> not found

这是有问题的,因为 Rails 的 HashWithIndifferentAccess 默认使用字符串键。如果使用 ActiveSupport,一种解决方案是在散列上调用 symbolize_keys

是否有替代方法让 String#% 方法尝试字符串键和符号键?

这是 Ruby 中值得提交错误报告的错误吗?或者是否有强制执行此行为的原因,例如同时存在 :host'host' 键的边缘情况?

最佳答案

Ruby 不能互换地处理字符串和符号,这不是错误;正如您所注意到的,您正在使用 Rails 的 HashWithIndifferentAccess,它的存在正是因为 Ruby 经常认为字符串和符号不相关。

这与关键字参数的情况类似,也不允许字符串键控哈希。

充其量,您可以尝试争论 sprintf 应该使用 ruby​​ 级访问器方法([]fetch),这HashWithIndifferentAccess 覆盖,而不是直接执行 C 级 rb_hash_lookup2

或者,Rails 可以通过部分恢复 c918a3a0691 之间存在的 default 行为来完成这项工作。和 a218a35e660 .

关于ruby - 带有命名键的百分比格式字符串不接受带有字符串键的散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com