函数调用Ruby

时间:2014-09-10 09:14:01

标签: ruby

我是ruby的新手,我想实现这个目标:

Foo.runtask param1: :asd, param2: :qwerty

我知道如何使用两个参数创建一个函数,但我想知道如何调用它,就像我特别提到的那样#34; param1:"和" param2:"

2 个答案:

答案 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