在Ruby中,{}
和之间有什么区别[]
?
{}
似乎用于代码块和哈希.
是[]
只为数组?
文件不是很清楚.
这取决于具体情况:
独立时,或分配给变量,[]
创建数组,并{}
创建哈希.例如
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
另一个不太明显的用法[]
是作为Proc#call和Method#call的同义词.第一次遇到它时可能会有点混乱.我猜它背后的理性是它使它看起来更像是一个普通的函数调用.
例如
proc = Proc.new { |what| puts "Hello, #{what}!" } meth = method(:print) proc["World"] meth["Hello",","," ", "World!", "\n"]
从广义上讲,你是对的.除了哈希之外,一般的风格是花括号{}
通常用于可以将所有块放在一条线上的块,而不是使用do
/ end
跨越几条线.
方括号[]
在许多Ruby类中用作类方法,包括String,BigNum,Dir和令人困惑的Hash.所以:
Hash["key" => "value"]
和以下一样有效:
{ "key" => "value" }