ruby – 处理一个带有可选参数的方法,后跟一个关键字参数列表

ruby – 处理一个带有可选参数的方法,后跟一个关键字参数列表,第1张

概述我想传递一个可选参数(任何数据类型,甚至是哈希),然后是一个方法的关键字参数列表(可以为空). 这就是我得到的: def my_method(subject = nil, **options) [subject, options]end 在以下情况下,方法输出符合预期: >没什么 my_method()# => [nil, {}] >一个主题 my_method('foo')# => [ 我想传递一个可选参数(任何数据类型,甚至是哈希),然后是一个方法的关键字参数列表(可以为空).

这就是我得到的:

def my_method(subject = nil,**options)  [subject,options]end

在以下情况下,方法输出符合预期:

>没什么

my_method()# => [nil,{}]

>一个主题

my_method('foo')# => ["foo",{}]

>一个有选项的文字主题

my_method('foo',bar: 'bar')# => ["foo",{:bar=>"bar"}]

>哈希作为主题与选项

my_method({foo: 'foo'},bar: 'bar')# => [{:foo=>"foo"},{:bar=>"bar"}]

>没有主题,只有选项

my_method(bar: 'bar')# => [nil,{:bar=>"bar"}]

当传递Hash作为主题而没有选项时,期望的结果是:

my_method({foo: 'foo'})# => [{:foo=>"foo"},{}]

但我得到以下内容;我没有得到正确的主题:

my_method({foo: 'foo'})# => [nil,{:foo=>"foo"}]

my_method(foo:’foo’)是否相当于my_method({foo:’foo’})?关于如何获得理想结果的任何想法?

解决方法 请参阅,您有**选项作为参数,没有任何默认值&第一个参数有默认值.所以要理解以下单个论证案例,

无论何时传递单个参数,都会尝试分配给第二个参数(因为第一个参数保持默认值为nil)&如果由于类型不匹配而失败则将其分配给第一个参数.这就是my_method(4)的工作方式.

现在假设您将单个参数作为哈希传递,匹配以分配给第二个参数然后当然它被分配给第二个参数&首先是设置默认值为nil.

如果你想使它工作,那么你可以做,

> my_method({sd: 4},{}) => [{:sd=>4},{}]

或者你可以在传球时提供参数名称,

> my_method(subject: {sd: 4}) => [{:sd=>4},{}]
总结

以上是内存溢出为你收集整理的ruby – 处理一个带有可选参数的方法,后跟一个关键字参数列表全部内容,希望文章能够帮你解决ruby – 处理一个带有可选参数的方法,后跟一个关键字参数列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1292489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存