Ruby以编程方式调用方法,具有可变数量的args
发布时间:2020-12-17 03:42:47 所属栏目:百科 来源:网络整理
导读:我想尝试做类似的事情: def foo(mode= :serial) if (mode == :serial) then self.send(:bar,"one_type") else self.send(:bar,"second_type",:T5) endend 我显然可以这样打出来. 但我最近尝试将其扩展为包含第二个函数: def foo(mode= :serial) if (mode =
我想尝试做类似的事情:
def foo(mode= :serial) if (mode == :serial) then self.send(:bar,"one_type") else self.send(:bar,"second_type",:T5) end end 我显然可以这样打出来. 但我最近尝试将其扩展为包含第二个函数: def foo(mode= :serial) if (mode == :serial) then self.send(:bar,"one_type") self.send(:foobar,"one_type",20) else self.send(:bar,:T5) self.send(:foobar,20,:T5) end end 我仍然可以继续,但我想,这里有一个模式,我应该把论点抽象到另一层,并使这更简单. 所以我想做的是这样的: arg_arr = [:bar,"one_type"] arg_arr_2 = [:foobar,20] if (mode == :serial) then self.send(arg_arr) self.send(arg_arr_2) else arg_arr << :T5 arg_arr2 << :T5 self.send(arg_arr) self.send(arg_arr2 ) end 我尝试了一些涉及.each,.inspect的其他想法,但没有任何可行的(通常的错误是无法将数组转换为字符串,我猜这是指它将数组视为整个函数名称的事实) .如果我明确说“使用数组元素[0],[1]等,我就可以做到,但这看起来很浪费. 有没有办法实现这一点,而无需编写硬编码参数数量的代码? 解决方法
试试这个
def foo(a,b) puts a puts b end array = ['bar','qux'] send(:foo,*array) # using send foo(*array) # using the method name 两个都打印 bar qux splat运算符*打包或解包数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |