当前位置:  开发笔记 > 后端 > 正文

Ruby - 将块传递给方法

如何解决《Ruby-将块传递给方法》经验,为你挑选了2个好方法。

我正在尝试使用Highline gem进行Ruby密码输入,因为我有两次用户输入密码,我想消除我传入的块上的重复.例如,我的简单版本现在做的是:

new_pass = ask("Enter your new password: ") { |prompt| prompt.echo = false }
verify_pass = ask("Enter again to verify: ") { |prompt| prompt.echo = false }

而我想改变它是这样的:

foo = Proc.new { |prompt| prompt.echo = false }
new_pass = ask("Enter your new password: ") foo
verify_pass = ask("Enter again to verify: ") foo

遗憾的是,这不起作用.这样做的正确方法是什么?



1> Adam Byrtek..:

David的代码可以正常工作,但这是一个更简单,更简短的解决方案:

foo = Proc.new { |prompt| prompt.echo = false }
new_pass = ask("Enter your new password: ", &foo)
verify_pass = ask("Enter again to verify: ", &foo)

在定义方法时,您还可以使用&符号将块分配给变量:

def ask(msg, &block)
  puts block.inspect
end



2> Honza..:

这就是你应该怎么做,干净简单:

def ask(question)
    yield(question)
end

proc = Proc.new { |question| puts question }
new_pass = ask("Enter your new password: ", &proc)
verify_pass = ask("Enter again to verify: ", &proc)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有