gpt4 book ai didi

ruby - 何时在 Ruby 中使用关键字参数或命名参数

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:35 25 4
gpt4 key购买 nike

Ruby 2.0.0 支持关键字参数 (KA),我想知道在纯 Ruby 的上下文中此功能的好处/用例是什么,特别是考虑到由于关键字匹配需要每次调用带有关键字参数的方法时都会完成。

require 'benchmark'

def foo(a:1,b:2,c:3)
[a,b,c]
end

def bar(a,b,c)
[a,b,c]
end

number = 1000000
Benchmark.bm(4) do |bm|
bm.report("foo") { number.times { foo(a:7,b:8,c:9) } }
bm.report("bar") { number.times { bar(7,8,9) } }
end

# user system total real
# foo 2.797000 0.032000 2.829000 ( 2.906362)
# bar 0.234000 0.000000 0.234000 ( 0.250010)

最佳答案

关键字参数有一些独特的优势,但没有人触及过。

首先,您与参数的顺序无关。所以在你可能偶尔有一个 nil 参数的情况下,它看起来更干净:

def print_greeting(name, message = "Hello")
puts "#{message}, #{name}"
end

print_greeting("John Connor", "Hasta la vista")

如果您使用关键字参数:

def print_greeting(message: "Hello", name:)
puts "#{message}, #{name}"
end

print_greeting(message: "Hasta la vista", name: "John Connor")

甚至

print_greeting(name: "John Connor", message: "Goodbye")

它消除了必须记住参数顺序的需要。但是,缺点是您必须记住参数的名称。这应该或多或少是直观的,并且可以说会导致更仔细考虑的方法签名。

使用关键字参数的另一个好处是,当您的方法将来可能需要额外的参数时。

def create_person(name:, age:, height:)
# make yourself some friends
end

如果您的系统要求现在需要了解一个人最喜欢的糖果,或者他们是否超重(因为食用了太多他们最喜欢的糖果),该怎么办?您如何使用关键字参数来做到这一点?简单:

def create_person(name:, age:, height:, favorite_candy:, overweight: true)
# make yourself some fat friends
end

在关键字参数之前总是有散列,但这导致了更多的样板代码来提取和分配变量。样板代码 == 更多的打字 == 更多潜在的拼写错误 == 更少的时间来编写出色的 ruby​​ 代码。

def old_way(name, opts={})
age = opts[:age]
height = opts[:height]
# all the benefits as before, more arthritis and headaches
end

如果您只是设置一个接受一个参数并且很可能永远不需要更改的方法:

def say_full_name(first_name, last_name)
puts "#{first_name} #{last_name}"
end

那么应该避免使用关键字参数,因为这会对性能造成很小的影响。

关于ruby - 何时在 Ruby 中使用关键字参数或命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15062570/

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