Return 个 hashmap 成员通过 class get 方法

Return members of a hashmap through a class get method

以下returns default "client?":

class ClientMap
    def initialize
        @@clients = {"DP000459": "BP"}
        @@clients.default = "client?"
    end

    def get(id)
        return @@clients[:id]
    end
end

clientMap = ClientMap.new
cKey = "DP000459"
puts clientMap.get(cKey)

谁能解释为什么我无法检索到 'default' 之外的任何内容?

你有两个问题。首先,您在哈希中使用符号语法,只有当您的键是符号时才有效。如果你希望keys是字符串,你需要使用hash-rocket语法:@@clients = {'DP000459' => 'BP'}.

其次,你的方法 returns clients[:id] 不管提供什么参数。关键是符号 :id 而不是局部变量 id。您需要将其更改为 @@clients[id].

这是您想要的清理版本:

class ClientMap

  def initialize
    @@clients = {'DP000459' => 'BP'}
    @@clients.default = 'client?'
  end

  def get(id)
    @@clients[id]
  end
end

我还冒昧地使间距更 Ruby-地道。

最后,对于Ruby中的变量名,use snake_case:

>> client_map = ClientMap.new
>> c_key = 'DP000459'
>> client_map.get(c_key)
#> "BP"

看看这些代码:

h = { foo: 'bar' }               # => {:foo=>"bar"}
h.default = 'some default value' # => "some default value"
h[:foo]                          # => "bar"
h[:non_existing_key]             # => "some default value"

您可以阅读 here 关于 Hash#default 方法的内容

Returns the default value, the value that would be returned by hsh if key did not exist in hsh