gpt4 book ai didi

Ruby - 转义一个数字前导变量名

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:45 24 4
gpt4 key购买 nike

我正在使用 create() 插入到一个已经存在的表中,但是一些表字段和变量名称以数字开头。目前在 Ruby 中,当我尝试执行以下操作时出现语法错误“unexpected tIDENTIFIER”-

foo.each do |x|
Object.create(
3pm: x.3pm,
3pa: x.3pa
)
end

如果我将它更改为 '3pm' => x.3pm,它会在 x.3pm 部分给我一个语法错误。

我怎样才能避免这种情况以使其正常运行?

最佳答案

问题是 3pm 不是 valid identifier在 ruby 中。在 Ruby 中,使用 :name 语法声明的符号文字和方法名称都必须是有效的标识符。

在键的情况下,您可以通过使用字符串来解决这个问题,正如您发现的那样,或者通过对符号文字使用 :'name' 语法:

foo.each do |x|
Object.create(
:'3pm' => x.3pm,
:'3pa' => x.3pa
)
end

不幸的是,这仍然存在 3pm3pa 不是有效方法名称的问题。通常,由于这些不是有效的方法名称,因此它们甚至不能是 x 上的方法。不过在这种情况下,x 可能使用 define_methodmethod_missing Ruby 的功能来创建或模拟名为 3pm 的方法的存在(即使这在 Ruby 中通常不是有效的方法名称)。

幸运的是,我们可以使用 Object#public_send 来解决这个问题调用方法:

foo.each do |x|
Object.create(
:'3pm' => x.public_send(:'3pm'),
:'3pa' => x.public_send(:'3pa')
)
end

这应该可以解决您的问题。

关于Ruby - 转义一个数字前导变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431766/

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