我正在尝试使用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
遗憾的是,这不起作用.这样做的正确方法是什么?
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
这就是你应该怎么做,干净简单:
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)