我是ruby的新手,我想实现这个目标:
Foo.runtask param1: :asd, param2: :qwerty
我知道如何使用两个参数创建一个函数,但我想知道如何调用它,就像我特别提到的那样#34; param1:"和" param2:"
答案 0 :(得分:3)
param1: :asd, param2: :qwerty
这是{ param1: :asd, param2: :qwerty }
的简写,这是一个哈希(在某些情况下,你可以省略哈希的曲线)。
如果你想传递这样的参数,你的方法应该接受Hash作为参数
例如
def my_method(options)
puts options[:param1]
puts options[:param2]
end
然后你可以拨打my_method param1: :asd, param2: :qwerty
答案 1 :(得分:2)
从ruby 2.0开始,ruby支持命名参数,所以虽然你仍然可以将你的方法声明为只使用一个选项参数,但你也可以这样做
def foo(param1: 1, param2: :bar)
...
end
在内部深处仍然存在传递的参数哈希值,但是这允许您轻松指定默认值(如普通默认值,这些值可以是任何ruby表达式)并且如果传递名称将引发异常除列出的参数之外的参数。
在ruby 2.1中,您还可以使用强制命名参数
def foo(param1: 1, param2:)
...
end
param2
现在是强制性的。
在这两种情况下,您都可以像以前一样调用方法:
foo(param1: :asd, param2: :qwerty)
事实上,仅通过查看此调用,您无法判断它们是作为命名参数还是作为散列使用
你当然可以用哈希模拟这个,但你最终不得不重复写一堆样板参数验证码。
要明确告知参数是否采用其默认值,您可以使用这个众所周知的技巧
def foo(param1: (param_1_missing=true; "foo")
...
end
此处param1
默认设置为“foo”,param_1_missing
为true或nil