我试图用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

Ruby相关问答推荐

Ruby脚本递归地创建深度嵌套的目录

CarrierWave Multi-uploader重命名现有文件

Windows powershell文件类型编码中Ruby IO流的原因是什么

创建线程安全的临时文件名

查看 Savon 请求 XML 而不发送到服务器

你如何称呼 Ruby 中的 &: 运算符?

Kernel#gets try 读取文件而不是标准输入

如何在不将换行符粘贴到字符串中的情况下使用puts添加额外的换行符?

使用 Bundler 时,为什么要关心 RVM 的 Gemset 功能?

Ruby 哈希文字的顺序是否得到保证?

Ruby 中的字符串是可变的吗?

osx bash上的树命令

在 Ruby 中将数组转换为索引哈希

Puppet/Facter无法检索事实 fqdn:如何修复或规避?

如何在 Mac OS X Lion 中安装 Ruby 1.9.3?

工厂女孩 - 目的是什么?

Ruby哈希中的条件键/值

Integer 和 Fixnum 有什么区别?

如何在Ruby中将字符串拆分为仅具有给定字符的两部分?

Ruby 类继承:什么是`<<`(双倍小于)?