gpt4 book ai didi

ruby-on-rails - 字符串插值不适用于 Ruby heredoc 常量

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

我有一个很长的常量定义需要插值(真正的要长得多):

const = "This::Is::ThePath::To::MyModule::#{a_variable}".constantize

现在,为了使其更具可读性,我尝试使用 heredocs 创建多行字符串:

const = <<-EOT.constantize
This::Is::ThePath::
To::MyModule::#{a_variable}
EOT

但是当我执行它时,我得到一个NameError: wrong constant name。由于第一个示例有效,我假设它与字符串插值有关?

对哪里出了问题有什么想法吗?

最佳答案

从 Here-Document 中去除所有空格和换行符

在调用#constantize 之前,您需要从插入的此处文档中删除所有空格、制表符和换行符。以下独立示例将起作用:

require 'active_support/inflector'

module This
module Is
module ThePath
module To
module MyModule
module Foo
end
end
end
end
end
end

a_variable = 'Foo'
const = <<EOT.gsub(/\s+/, '').constantize
This::Is::ThePath::
To::MyModule::#{a_variable}
EOT

#=> This::Is::ThePath::To::MyModule::Foo

关于ruby-on-rails - 字符串插值不适用于 Ruby heredoc 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090486/

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