Ruby - 将块传递给方法

Chr*_*nch 41 ruby highline

我正在尝试使用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)