何时在Ruby中使用关键字参数aka命名参数

前端之家收集整理的这篇文章主要介绍了何时在Ruby中使用关键字参数aka命名参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby 2.0.0支持关键字参数(KA),我想知道在纯Ruby的上下文中,这个功能的优点/使用情况是什么,特别是在看到由于需要每个关键字匹配的关键字匹配而导致的性能损失调用一个关键字参数的方法.
require 'benchmark'

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

def bar(a,c)
  [a,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)

解决方法

关键词参数有一些明显的优点,没有人碰到过.

首先,你不符合论据的顺序.所以在你偶尔会有一个零参数的情况下,它看起来很干净:

def yo(sup,whats="good",dude="!")
  # do your thing
end

yo("hey",nil,"?")

如果使用关键字参数:

def yo(sup:,whats:"good",dude:"!")
  # do your thing
end

yo(sup: "hey",dude: "?")

甚至

yo(dude: "?",sup: "hey")

它不需要记住参数的顺序.但是,缺点是您必须记住参数的名称,但应该是或多或少的直观.

此外,当您有一种方法可能需要在未来采取更多的争议.

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

如果你的系统突然想知道一个人最喜欢的糖果吧,或者如果他们超重(从消费太多的他们最喜欢的糖果吧),你该怎么办?简单:

def create_person(name:,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

那么应该避免关键字参数,因为性能很小.

原文链接:https://www.f2er.com/ruby/266846.html

猜你在找的Ruby相关文章