Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中使用(:send)和关键字参数?_Ruby - Fatal编程技术网

在Ruby中使用(:send)和关键字参数?

在Ruby中使用(:send)和关键字参数?,ruby,Ruby,我有一个私有方法,我正试图使用它在Ruby中进行一些测试。这个方法很复杂,我不想暴露在类之外,所以我想测试这个方法,但我也不需要将它列为公共方法。它有关键字参数。如何使用send调用该方法,同时传递关键字参数/命名参数?有办法吗 方法如下所示: 定义某些方法(关键字\u arg1:、关键字\u arg2:、关键字\u arg3:nil)取决于关键字args的定义方式 如果它们是以内联方式定义的,无论出于何种原因,请以内联方式传递它们: SomeClass.send(:some_method, {

我有一个私有方法,我正试图使用它在Ruby中进行一些测试。这个方法很复杂,我不想暴露在类之外,所以我想测试这个方法,但我也不需要将它列为公共方法。它有关键字参数。如何使用
send
调用该方法,同时传递关键字参数/命名参数?有办法吗

方法如下所示:


定义某些方法(关键字\u arg1:、关键字\u arg2:、关键字\u arg3:nil)

取决于关键字args的定义方式

如果它们是以内联方式定义的,无论出于何种原因,请以内联方式传递它们:

SomeClass.send(:some_method, {keyword_arg1: 'foo', keyword_arg2: 'bar'})
如果它们是在散列中定义的,则可以将其解包:

hash = {keyword_arg1: 'baz', keyword_arg2: 'bing'}
SomeClass.send(:some_method, **hash)

注意,在Ruby 3.0中,必须使用double-splat操作符
obj.send(:some_方法,***{arg1:'foo',arg2:'bar'})