gpt4 book ai didi

Ruby 关键字参数语法解释

转载 作者:数据小太阳 更新时间:2023-10-29 08:26:36 32 4
gpt4 key购买 nike

如果我们有一个这样定义的 create_widget 方法:

def create_widget(size, properties)
puts properties.class #=> Hash
puts properties[:id] #=> table22
end

有什么区别:

create_widget(6, {:id => "table22", :class => "Cart"})
create_widget(6, :id => "table22", :class => "Cart")
create_widget(6, id: "table22", class: "Cart")

在任何情况下,第二个参数都是一个Hash,并呈现相同的结果。

最佳答案

您的所有三行在功能上都是相同的。

哈希对象使用花括号 {} 声明,Ruby 开始使用火箭 => 配对键和值。因此,在将它传递给函数时声明一个看起来就像您的第一行。

create_widget(6, {:id => "table22", :class => "Cart"})

为了方便和简洁的语法,如果 Hash 是最后一个参数,Ruby 允许您省略 {},这会得到第 2 行。这是许多接受某种类型的方法的常用习惯用法额外选项散列:

def create_widget(number, properties = {}); end
create_widget(6, :id => "table22", :class => "Cart")

Ruby 1.9 引入了冒号 : 语法来替换火箭 => 当你的键是符号时,导致第 3 行:

create_widget(6, id: "table22", class: "Cart")

所以在这些情况下,差异纯粹是视觉上的。请注意,如果您有非符号键,则需要使用 rocket => 语法。欢迎您将它们混合在同一个哈希中:

create_widget(6, "id" => "table22", class: "Cart")

另外值得注意的是,Ruby 2 引入了关键字参数,它看起来与第 3 行相同。除了人们从选项哈希中获取的描述性名称之外,关键字参数还为您提供了排序灵 active 。与选项散列相比,它们还可以让您更轻松地设置默认值,因此 create_widget 可能如下所示:

def create_widget(number, id:, class: "Cart")

id: 声明我们已将参数命名为 id,并且它没有默认值,因此它是必需的。另一方面,class: "Cart" 将默认为 "Cart",因此是可选的。现在所有这些调用的行为都相同:

create_widget(6, id: "table22")
create_widget(6, id: "table22", class: "Cart")
create_widget(6, class: "Cart", id: "table22")

关于Ruby 关键字参数语法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174651/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com