ruby – 当子元素不是数组时,splat参数后需要可选的关键字参数
发布时间:2020-12-17 02:57:26 所属栏目:百科 来源:网络整理
导读:根据这个 post,在splat参数之后可以有一个可选的关键字参数.如果splat参数引入了一个数组数组,但是当它是一个哈希数组时,它就可以工作 例如,如果被调用的方法被定义为 def call(*scores,alpha: nil) puts scoresend 然后这个工作 scores = [[1,2],[3,4]]call
根据这个
post,在splat参数之后可以有一个可选的关键字参数.如果splat参数引入了一个数组数组,但是当它是一个哈希数组时,它就可以工作
例如,如果被调用的方法被定义为 def call(*scores,alpha: nil) puts scores end 然后这个工作 scores = [[1,2],[3,4]] call(*scores) 但事实并非如此 scores = [ {a: 1},{b: 3}] call(*scores) 给出以下(与ruby2.4.4) ArgumentError: unknown keyword: b 但这很有效 scores = [ {a: 1},{b: 3}] call(*scores,alpha: nil) 这里出了什么问题? 解决方法
splat运算符将数组拆分为参数.
但是,如果你将它包装在一个数组中它再次工作,但现在它是一个数组内的数组,仍然被视为传递给你的方法的单个参数. call([*scores]) #no error 但也要说明为什么你得到错误看看这里发生了什么: def call(*scores,alpha: nil) puts scores.inspect end call(*scores[0]) #=> #[[:a,1]] 更新:感谢@Stefan,错误的原因实际上是您的方法接受关键字参数,这显然是一个已知的错误.见Keyword arguments unpacking (splat) in Ruby 你的上一个例子的工作原理是,通过将第二个参数传递给你的方法,splat将第一个参数作为一个数组处理,而不是试图将它分成两个参数. 更多见Ruby,Source Code of Splat? 另见https://www.rubyguides.com/2018/07/ruby-operators/#Ruby_Splat_Operator (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |