Ruby一线内胆懒人串评价

erh*_*sto 0 ruby

我想创建ruby one liner,将一些信息输出到stdout并从stdin获取数据.我有一些代码:

["This should be shown first", "This second: #{gets.chomp}"].each{|i| puts "#{i}"}
Run Code Online (Sandbox Code Playgroud)

...但显然,在每个元素的迭代之前,在评估整个数组的同时评估get.chomp.

结果,我首先提示输入,然后打印每个元素.

我可以以某种方式懒惰地评估它,按顺序打印数组并且仍然可以将整个事物放在一行中吗?

Ser*_*sev 5

实现延迟评估的一种方法是使用过程.像这样的东西(多行可读性):

[
  -> { puts "This should be shown first" }, 
  -> { print "This second: "; puts gets.chomp },
].each(&:call)
Run Code Online (Sandbox Code Playgroud)