ruby hash 默认值的问题

参考:http://stackoverflow.com/questions/16159370/ruby-hash-default-value-behavior

使用ruby hash 默认值为空数组,向key 对应的value 追加值然后去get一个不存在的key 时候发现value为 一个非空的arry,不是默认值[]

具体使用示例如下:

 1 One default Array with mutation
 2
 3 hsh = Hash.new([])
 4
 5 hsh[:one] << ‘one‘
 6 hsh[:two] << ‘two‘
 7
 8 hsh[:nonexistent]
 9 # => [‘one‘, ‘two‘]
10 # Because we mutated the default value, nonexistent keys return the changed value
11
12 hsh
13 # => {}
14 # But we never mutated the hash itself, therefore it is still empty!
15 One default Array without mutation
16
17 hsh = Hash.new([])
18
19 hsh[:one] += [‘one‘]
20 hsh[:two] += [‘two‘]
21 # This is syntactic sugar for hsh[:two] = hsh[:two] + [‘two‘]
22
23 hsh[:nonexistant]
24 # => []
25 # We didn‘t mutate the default value, it is still an empty array
26
27 hsh
28 # => { :one => [‘one‘], :two => [‘two‘] }
29 # This time, we *did* mutate the hash.
30 A new, different Array every time with mutation
31
32 hsh = Hash.new { [] }
33 # This time, instead of a default *value*, we use a default *block*
34
35 hsh[:one] << ‘one‘
36 hsh[:two] << ‘two‘
37
38 hsh[:nonexistent]
39 # => []
40 # We *did* mutate the default value, but it was a fresh one every time.
41
42 hsh
43 # => {}
44 # But we never mutated the hash itself, therefore it is still empty!
45
46
47 hsh = Hash.new {|hsh, key| hsh[key] = [] }
48 # This time, instead of a default *value*, we use a default *block*
49 # And the block not only *returns* the default value, it also *assigns* it
50
51 hsh[:one] << ‘one‘
52 hsh[:two] << ‘two‘
53
54 hsh[:nonexistent]
55 # => []
56 # We *did* mutate the default value, but it was a fresh one every time.
57
58 hsh
59 # => { :one => [‘one‘], :two => [‘two‘], :nonexistent => [] }
时间: 2024-10-17 11:59:36

ruby hash 默认值的问题的相关文章

ruby hash

使用字面量创建的hash对象,必须包括至少一项,ruby才认为它是hash a = {} 不对 a = {1:"a"} 对 其中{1:a} 这样写 a表示一个变量 Hash.new Hash[] 可以使用中文作为key irb(main):012:0> c = {"致谢":1, a:2} => {:致谢=>1, :a=>2} irb(main):013:0> c[:致谢] => 1 irb(main):064:0> c.fi

memcached源码分析-----memcached启动参数详解以及关键配置的默认值

转载请注明出处: http://blog.csdn.net/luotuo44/article/details/42672913 本文开启本系列博文的代码分析.本系列博文研究是memcached版本是1.4.21. 本文将给出memcached启动时各个参数的详细解释以及一些关键配置的默认值.以便在分析memcached源码的时候好随时查看.当然也方便使用memcached时可以随时查看各个参数的含义.<如何阅读memcached源码>说到memcached有很多全局变量(也就是关键配置),这些

MySQL 5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数

新参数说明和设置,这里说下5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数. MySQL Server参数: 1,optimizer_switch:优化器选项. Variable_name: optimizer_switch Value: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index

spring @Value 设置默认值

@Value 的作用不用说 大家都知道 注解模式下 读取配置文件 注入属性值 /** * MQ地址 */ @Value("${NamesrvAddr}") private String namesrvAddr;   上面的是一个标着的 @Value 注解 如果配置文件中没有设置 NamesrvAddr Spring 在启动的时候讲报错. 设置默认值很简单 @Value("${NamesrvAddr:192.168.0.1}") private String name

EF Core1.0 CodeFirst为Modell设置默认值!

当我们使用CodeFirst时,有时候需要设置默认值! 如下 public int Delete { get; set; } = 0; public string AdminName {get; set;} = "admin"; public bool CacheDbResults { get; set; } = true;

使用jQuery的data方法来为页面中的某个元素存储数据,(获取焦点,清除默认值)

使用data方法可以避免在DOM中存储数据,有些前端开发er喜欢使用HTML的属性来存储数据: 使用”alt”属性来作为参数名存储数据其实对于HTML来说是不符合语义的. 我们可以使用jQuery的data方法来为页面中的某个元素存储数据: html部分: 1 <form id="testform"> 2 <input type="text" class="clear" value="Always cleared&qu

Siebel 找字段、下拉菜单设置值、弹出新页面、弹出选择框、设置默认值 、按钮代码

产品缺陷太多,跟用户交互不人性化.例如搜索新建客户功能,用户输入后会自动保存数据,一旦保存后一. 找字段1.简单 CTRL+Q CTRL+Q 服务请求编号----对应的表.字段.长度: 客户编码-----对应的表.字段.长度(弹出新页面):- 点击上面的pick Applet会弹出“选取客户”对话框 有JOIN就不用TABLE:require代表必填 字段有两个值----项目编号 下图确定只有projectNum有用 3.表单中的字段(不在list column中,而是在control) 二.下

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

关于java中属性变量默认值的问题。

主要分为两种 1.全局变量 char '/u0000' byte 0 short 0 int 0 long 0L float 0.0f double 0.0d boolean false 以上8种基本数据类型的默认值. 引用数据类型的默认值为null. 举例如下: 在平常的jdbc访问数据库的过程中,如果通过实体对象映射数据映射操作数据库,由于一些错误原因,其中实体对象中有引用数据类型的变量时没有给其赋值, 默认就是null,如果有null值参与数据库的操作,那么访问的过程中就会报SQL语句异常