Tag: 命名参数

使用默认命名参数将`nil`传递给方法

在Rails项目中,我收集了一个包含10-15个键值对的哈希,并将其传递给一个类(服务对象)进行实例化。 应该从散列中的值设置对象属性,除非没有值(或nil )。 在这种情况下,期望将属性设置为默认值。 在创建对象之前,我没有检查散列中的每个值是否都是nil ,而是希望找到一种更有效的方法。 我正在尝试使用默认值的命名参数。 我不知道这是否有意义,但我想在使用nil调用参数时使用默认值。 我为此function创建了一个测试: class Taco def initialize(meat: “steak”, cheese: true, salsa: “spicy”) @meat = meat @cheese = cheese @salsa = salsa end def assemble “taco with: #@meat + #@cheese + #@salsa” end end options1 = {:meat => “chicken”, :cheese => false, :salsa => “mild”} chickenTaco = Taco.new(options1) puts chickenTaco.assemble […]

如何将命名参数传递给Rake任务?

有没有办法在不使用环境变量的情况下将命名参数传递给Rake任务? 我知道Rake任务可以接受两种格式的参数: 环境变量 $ rake my_task foo=bar 这将创建一个名为foo的环境变量和可以通过ENV[‘foo’]在Rake任务my_task访问的值bar 。 耙任务参数 $ rake my_task[‘foo’,’bar’] 这会将值foo和bar传递给前两个任务参数(如果已定义)。 如果my_task被定义为: task :my_task, :argument_1, :argument_2 那么argument_1的值为foo , argument_2的值为bar 。

何时使用关键字参数也称为Ruby中的命名参数

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)

Ruby Structs中的命名参数

如果这是一个显而易见的问题,我对Ruby很新,所以道歉。 我想在实例化Struct时使用命名参数,即能够指定Struct中哪些项获取什么值,并将其余项默认为nil。 例如,我想做: Movie = Struct.new :title, :length, :rating m = Movie.new :title => ‘Some Movie’, :rating => ‘R’ 这不起作用。 所以我想出了以下内容: class MyStruct ‘Some Movie’, :rating => ‘R’ 这似乎工作得很好,但我不确定是否有更好的方法来做到这一点,或者如果我做的事情非常疯狂。 如果有人能够validation/撕开这种方法,我将非常感激。 UPDATE 我最初在1.9.2中运行它并且它工作正常; 但是在其他版本的Ruby中尝试过它(谢谢rvm),它的工作原理不起作用,如下所示: 1.8.7:不工作 1.9.1:工作 1.9.2:工作 JRuby(设置为1.9.2运行):不工作 JRuby对我来说是一个问题,因为我想保持它与部署目的兼容。 再来一次更新 在这个不断增加的漫无边际的问题中,我尝试了各种版本的Ruby并发现1.9.x中的Structs将其成员存储为符号,但在1.8.7和JRuby中,它们存储为字符串,因此我将代码更新为如下(接受已经给出的建议): class MyStruct ‘Some Movie’, :rating => ‘R’ 现在这似乎适用于我尝试过的所有Ruby风格。

Ruby中的默认值的可选参数

我想创建一个具有默认值的可选参数的函数 def my_function(a = nil, b=nil, c=500) end 并使用我想要指定的参数调用该函数 my_function(b=100) 我如何在Ruby 1.9.2中实现这一目标?