回答
这取决于上下文:
当自己,或者分配给一个变量,
[]
创建一个rray,并且{}
创建散列。例如a = [1,2,3] # an array b = {1 => 2} # a hash
[]
可以重写为定制方法,并且通常用来获取散列东西(标准库设置[]
作为哈希的方法,其是相同的fetch
)
还有它被用作类方法的惯例,就像您可能在C#或Java中使用static Create
方法一样。例如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
查看最后一个例子的红宝石Hash docs。
这可能是最棘手的一个 -
{}
也是块的语法,但只有当传递给参数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
从广义上讲,你是对的。除了散列之外,一般风格是大括号{}
通常用于可以全部放在一行上的块,而不是跨多行使用do
/end
。
方括号[]
被用作很多Ruby类的类方法,包括String,BigNum,Dir和足够容易混淆的哈希。所以:
Hash["key" => "value"]
只是为有效为:
{ "key" => "value" }
几个例子:
[1, 2, 3].class
# => Array
[1, 2, 3][1]
# => 2
{ 1 => 2, 3 => 4 }.class
# => Hash
{ 1 => 2, 3 => 4 }[3]
# => 4
{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash
lambda { 1 + 2 }.class
# => Proc
lambda { 1 + 2 }.call
# => 3
拉姆达{1 + 2} []#=> 3 – 2011-09-01 02:37:36
的方括号[]用于初始化数组。 为[]的初始化的情况下该文档是在
ri Array::[]
的大括号{}用来初始化哈希。 为{初始化情况下}的文档是
ri Hash::[]
方括号也通常用作许多核心红宝石类的方法,例如数组,散列,字符串,以及其他。
您可以访问有方法“[]”与定义的所有类的列表
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"
另外,不那么明显,[]
用途是作为Proc#调用和Method#调用的同义词。这可能会让你第一次遇到它有点困惑。我猜它背后的理由是它使它看起来更像一个正常的函数调用。
E.g.
proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)
proc["World"]
meth["Hello",","," ", "World!", "\n"]
请注意,可以定义自己的类的[]
方法:
class A
def [](position)
# do something
end
def @rank.[]= key, val
# define the instance[a] = b method
end
end
- 1. 闭包的括号是什么意思?
- 2. 什么是“:*”(冒号星号)在Ruby中是什么意思?
- 3. Java中的空花括号/大括号是什么意思?
- 4. 双括号是什么意思?
- 5. 大括号中的数字是什么“{0}”是什么意思?
- 6. 花括号后的括号是什么意思?
- 7. Objective-C括号中的星号......这是什么意思?
- 8. 空圆括号中的星号是什么意思?
- 9. 语句中的问号和冒号是什么意思?这是什么意思?
- 10. httpfox中'received'列的括号中的数字是什么意思?
- 11. 打开的括号后的逗号是什么意思?
- 12. Ruby中的“temps.each(&:valid?)”是什么意思?
- 13. ruby中的“class#method”是什么意思?
- 14. Ruby中的{{}是什么意思?
- 15. Ruby中的<>是什么意思?
- 16. Ruby中的“<< - ”是什么意思?
- 17. Ruby中的令牌“$$”是什么意思?
- 18. Ruby中的+ =是什么意思?
- 19. Ruby中的“阴影”是什么意思?
- 20. python中for循环中的[]括号是什么意思?
- 21. 在JavaScript/jQuery中,括号中的代码块是什么意思?
- 22. &符号是什么意思?
- 23. 冒号是什么意思?
- 24. 问号是什么意思?
- 25. 符号“⊇”是什么意思?
- 26. 这个方括号和括号括号是什么意思[first1,last1]?
- 27. 符号“#!”是什么意思?在Python中的意思是?
- 28. java属性文件中的大括号是什么意思?
- 29. JavaScript中的大括号是什么意思?
- 30. ASP.NET中的方括号是什么意思(C#)ex。会议(“”);?
边注:哈希#取不完全散列# []。 {:a => 1,:b => 2} .fetch(:c)IndexError:找不到密钥 – tokland 2011-02-13 12:43:27
@tokland`:c` not found – YoYoYonnY 2016-12-27 10:58:03
“还有一个约定,它被用作类你也可以在C#或Java中使用静态的Create方法。“这正是我正在寻找的答案。也是我最讨厌Ruby的经典例子;你必须知道很多晦涩的小技巧来阅读Ruby代码。 – Tony 2017-08-28 14:37:15