【问题标题】:Accessing symbols within strings in Ruby在 Ruby 中访问字符串中的符号
【发布时间】:2015-03-26 05:27:21
【问题描述】:

这里是 Ruby 的新手,我正在努力解决问题。我遇到了类似以下情况:

sql = q%{select foo from bar where var1 = :ugh and var2 = :moreugh}

现在,我可以打印出变量“sql”,但如果我只使用 puts 和 #{sql},它会显示如上的符号“:ugh”。

我希望能够打印出带有显示符号值而不是符号名称的字符串 sql。

那里有任何指针吗?非常感谢!

【问题讨论】:

  • q%{} 语法是什么?
  • 符号没有值,它是一个对象,如字符串或数字..

标签: ruby string symbols


【解决方案1】:

您的示例代码已损坏,我假设您想做一个单引号字符串%q{...}

这正是你得到的:一个字符串。所以那里没有符号,它只是一个字符串。类似于'...'

【讨论】:

    【解决方案2】:

    我认为,假设您使用的是符号而不是字符串,您可以使用以下查询:

    sql = "select foo from bar where var1 = 'ugh' and var2 = 'moreugh'"
    

    所以使用puts#{sql} 会给你正确的输出。

    如果这不符合您的要求,请发表评论。

    【讨论】:

      【解决方案3】:

      你有两个错误。您需要使用%Q 来启用插值,变量以#{:ugh} 的形式包含在字符串中。所以,你想要:

      sql = %Q{select foo from bar where var1 = #{ugh} and var2 = #{moreugh}}
      puts sql
      

      但是请,请,请不要这样做,即使只是一个小项目。您正在为 SQL 注入攻击设置自己。

      【讨论】:

      • 其实"#{:ugh}" == "ugh".
      【解决方案4】:

      你可能想要这个:

      sql = "select foo from bar where var1 = '#{ugh}' and var2 = '#{moreugh}"'
      

      其中ughmoreugh 是变量。但是,您应该这样做,您的系统将对 SQL 注入开放。改为在您的数据库引擎中使用绑定变量。

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 2013-11-21
        • 2010-10-04
        • 2011-01-01
        • 2012-11-23
        • 2019-11-19
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多