Ruby - 默认哈希值行为
Varsion

默认情况下,如果我们使用不存在的键值去请求哈希时,会得到nil

但是,如果我们给Hash指定了默认值

1
h = Hash.new(0)

代码中初始化哈希的默认值为0,当使用一个不存在的键时,就会返回该默认值(也可以使用defalut方法为已存在的哈希设置默认值)

重要的是:无论指定什么作为默认值,都会在使用不存在的键时获得该值,该键都会一直维持不存在的而窗体,知道为他分配一个值。

换句话说调用User["Chongya"]并不意味着User现在有了Chongya这个键。如果想要在哈希中使用这个键,就必须把这个键放到哈希中。

如果要引入一个不存在的键,然后使其变为存在哈希中的键,那么Hash.new上英语一个代码块可以达到此目的。这个代码块会在每次不存在的键被引用的时候被执行。

有两个对象将会作为这个代码块的参数,分别是哈希和不存在的键。

这可以自动设置键值,但是这并不是Ruby中的优雅的用法,但是的确有用(虽然不怎么好,但是的确好用),并足以编写一个可以抓取到哈希和键的代码块,然后执行设置操作:

1
user = Hash.new {hash,key hash[key] =  visitor}

当一个不存在的用户访问user的以判断他的身份的时候,代码块参数,就会将其的值设置为visitor(访客)并将其添加到user自身。

  • Post title:Ruby - 默认哈希值行为
  • Post author:Varsion
  • Create time:2020-09-15 09:31:02
  • Post link:https://blog.varsion.cn/post/e5b08f81.html
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments