加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 我怎样才能使一个匿名对象分裂,以便我可以使用&方法

发布时间:2020-12-17 02:00:01 所属栏目:百科 来源:网络整理
导读:当method_name需要多个对象时,我想使用方法(:method_name)习惯用法.我可以在 Ruby 1.9下这样做吗? 例如,如果我有 def move_file(old_filename,new_filename) STDERR.puts "Moving #{old_filename.inspect} to #{new_filename.inspect}" # Implementation f
当method_name需要多个对象时,我想使用&方法(:method_name)习惯用法.我可以在 Ruby 1.9下这样做吗?

例如,如果我有

def move_file(old_filename,new_filename)
  STDERR.puts "Moving #{old_filename.inspect} to #{new_filename.inspect}"
  # Implementation for careful moving goes here
end

old_filenames = ["foo.txt","bar.txt","hoge.ja.txt"]
new_filenames = ["foo_20110915.txt","bar_20110915.txt","hoge_20110915.ja.txt"]

代码

old_filenames.zip(new_filenames).each(&method(:move_file))

适用于Ruby 1.8,但不适用于Ruby 1.9.在Ruby 1.9下,它试图执行move_file([“foo.txt”,“foo_20110915.txt”])而不是move_file(“foo.txt”,“foo_20110915.txt”).

我如何将它展开,使它具有正确的arity?

解决方法我知道:

>使用def move_file(* arguments)替换def move_file(old_filename,new_filename)
>将每个(&方法(:move_file))替换为
每个{| old_filename,new_filename | move_file(old_filename,new_filename)}

解决方法

代替

each{|old_filename,new_filename| move_file(old_filename,new_filename)}

你应该能做到的

each{|pair| move_file(*pair)}

但我不知道你是如何推出无块变体的(我也需要它几次).我想& -shorthand是为了使语法更简单,并不意味着被阻塞太多(例如它是作为数组传递数组,还是splatted).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读