在Ruby中,{}
和之间有什么区别[]
?
{}
似乎同时用于代码块和哈希。
是 []
只为数组?
该文件不是很清楚。
Answers:
这取决于上下文:
单独使用或分配给变量时,将[]
创建数组并{}
创建哈希。例如
a = [1,2,3] # an array
b = {1 => 2} # a hash
[]
可以作为自定义方法重写,通常用于从哈希中获取内容(标准库设置[]
为与相同的哈希方法fetch
)。
还有一个约定,在同一方法中将其用作类方法您可能会static Create
在C#或Java中使用方法的方式。例如
a = {1 => 2} # create a hash for example
puts a[1] # same as a.fetch(1), will print 2
Hash[1,2,3,4] # this is a custom class method which creates a new hash
有关最后一个示例,请参见Ruby Hash文档。
这可能是最棘手的问题-
{}
也是块的语法,但仅在参数parens传递到方法之外时才使用。
当您调用没有parens的方法时,Ruby会查看您放在逗号的位置以弄清楚参数的结束位置(如果键入了参数,parens会在哪里)
1.upto(2) { puts 'hello' } # it's a block
1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end
1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash
:c
未找到
方括号[]用于初始化数组。[]的初始化程序案例的文档在
ri Array::[]
大括号{}用于初始化哈希。{}初始化程序案例的文档位于
ri Hash::[]
在许多核心的ruby类中,例如Array,Hash,String等,方括号也通常用作方法。
您可以访问所有使用以下方法定义的方法“ []”的类的列表:
ri []
大多数方法还具有允许分配事物的“ [] =“方法,例如:
s = "hello world"
s[2] # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s # => "hemlo world"
也可以使用圆括号代替“ {...}”,而不是在块上使用“ do ... end”。
可以看到使用方括号或大括号的另一种情况是在特殊的初始化程序中,可以使用任何符号,例如:
%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"