当前位置:  开发笔记 > 编程语言 > 正文

Ruby中不同的括号是什么意思?

如何解决《Ruby中不同的括号是什么意思?》经验,为你挑选了3个好方法。

在Ruby中,{}和之间有什么区别[]

{} 似乎用于代码块和哈希.

[]只为数组?

文件不是很清楚.



1> Orion Edward..:

这取决于具体情况:

    独立时,或分配给变量,[]创建数组,并{}创建哈希.例如

    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
    


旁注:Hash #fetch不完全是Hash#[].{:a => 1,:b => 2} .fetch(:c)IndexError:找不到密钥

2> sris..:

另一个不太明显的用法[]是作为Proc#call和Method#call的同义词.第一次遇到它时可能会有点混乱.我猜它背后的理性是它使它看起来更像是一个普通的函数调用.

例如

proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)

proc["World"]
meth["Hello",","," ", "World!", "\n"]



3> John Topley..:

从广义上讲,你是对的.除了哈希之外,一般的风格是花括号{}通常用于可以将所有块放在一条线上的块,而不是使用do/ end跨越几条线.

方括号[]在许多Ruby类中用作类方法,包括String,BigNum,Dir和令人困惑的Hash.所以:

Hash["key" => "value"]

和以下一样有效:

{ "key" => "value" }

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有