我正在尝试使用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 }
Run Code Online (Sandbox Code Playgroud)
而我想改变它是这样的:
foo = Proc.new { |prompt| prompt.echo = false }
new_pass = ask("Enter your new password: ") foo
verify_pass = ask("Enter again to verify: ") foo
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不起作用.这样做的正确方法是什么?
Ada*_*tek 72
David的代码可以正常工作,但这是一个更简单,更简短的解决方案:
foo = Proc.new { |prompt| prompt.echo = false }
new_pass = ask("Enter your new password: ", &foo)
verify_pass = ask("Enter again to verify: ", &foo)
Run Code Online (Sandbox Code Playgroud)
在定义方法时,您还可以使用&符号将块分配给变量:
def ask(msg, &block)
puts block.inspect
end
Run Code Online (Sandbox Code Playgroud)
Hon*_*nza 13
这就是你应该怎么做,干净简单:
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)
Run Code Online (Sandbox Code Playgroud)