这就是我得到的:
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 – 处理一个带有可选参数的方法,后跟一个关键字参数列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)