开发者

Any way to automagically `puts` the last expression in a Ruby script?

开发者 https://www.devze.com 2023-03-20 03:45 出处:网络
I\'m working on implementing Project Euler solutions as semantic Ruby one-liners. It would be extremely useful if I could coerce Ruby to automatically puts the value of the last expression. Is there a

I'm working on implementing Project Euler solutions as semantic Ruby one-liners. It would be extremely useful if I could coerce Ruby to automatically puts the value of the last expression. Is there a way to do this? For example:

#!/usr/bin/env ruby -Ilib -rrubygems -reuler

1.upto(100).in开发者_Go百科to {|n| (n.sum.squared - n.map(&:squared).sum)

I realize I can simply puts the line, but for other reasons (I plan to eval the file in tests, to compare against the expected output) I would like to avoid an explicit puts. Also, it allots me an extra four characters for the solution. :)

Is there anything I can do?


You might try running it under irb instead of directly under a Ruby interpreter.

It seems like the options -f --noprompt --noverbose might be suitable (.

#!/usr/bin/env irb -f --noprompt --noverbose -Ilib -rrubygems -reuler

'put your one-liner here'

The options have these meanings:

  • -f: do not use .irbrc (or IRBRC)
  • --noverbose: do not display the source lines
  • --noprompt: do not prefix the output (e.g. with =>)


result = calculate_result

puts result if File.exist?(__FILE__)


result of eval is last executed operation just like any other code block in ruby

is doing

puts eval(file_contents)

an option for you?

EDIT

you can make use of eval's second parameter which is variables binding

try the following:

do_not_puts = true
eval(file_contents, binding)

and in the file:

....
result = final_result
if defined?(do_not_puts)
  result
else
  puts(result)
end


Is it an option to change the way you run scripts?

script.rb:

$_= 1.upto(100).into {|n| (n.sum.squared - n.map(&:squared).sum) 

invoke with echo nil.txt | /usr/bin/env/ruby -Ilib -rrubygems -reuler -p script.rb, where nil.txt is a file with a single newline.

0

精彩评论

暂无评论...
验证码 换一张
取 消