【问题标题】:Ruby - Undefined method 'has_key?' on ternary assignmentRuby - 未定义的方法“has_key?”三元分配
【发布时间】:2014-08-03 15:55:42
【问题描述】:

当我尝试将字符串分配给变量时,我在 Ruby 上遇到以下错误:

undefined method 'has_key?' for nil:NilClass (NoMethodError)

产生错误的代码如下:

uri = !@meta.has_key?("offset") ? "#{@@user_uri}?order=asc" : "#{@@user_uri}?per_page=#{per_page}&page=#{@meta['offset']}?order=asc"

如果我删除分配并用 put 替换它,它会按预期工作

puts !@meta.has_key?("offset") ? "#{@@user_uri}?order=asc" : "#{@@user_uri}?per_page=#{per_page}&page=#{@meta['offset']}?order=asc"
> http://example.com/users?order=asc

知道发生了什么吗?

【问题讨论】:

    标签: ruby hash


    【解决方案1】:

    似乎当您使用puts 时,@meta 具有不同的值。请仔细检查。

    无论如何,为什么不先确定@meta 不是nil,然后再尝试将其视为Hash

    return if @meta.nil?
    uri = !@meta.key?("offset") ? "#{@@user_uri}?order=asc" : "#{@@user_uri}?per_page=#{per_page}&page=#{@meta['offset']}?order=asc"
    

    我将has_key? 更改为密钥?如has_key?has been deprecated

    【讨论】:

    • 感谢您的弃用警告。事实上,@meta 的值在其他地方发生了变化。现在我修好了,谢谢。
    • 如果@metanil,我不明白return 的原因。如果@meta 永远不会是nil,或者如果nil 是可能的,则处理这种情况不是更好吗?
    • @CarySwoveland 是的,这是他可以采取的另一种方法。
    猜你喜欢
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2010-10-15
    相关资源
    最近更新 更多