有没有办法在Ruby脚本中自动“放入”最后一个表达式?
我正在将Project Euler解决方案作为语义实现。如果我可以强制Ruby自动输入最后一个表达式的值,那将非常有用。有办法做到这一点吗?例如:有没有办法在Ruby脚本中自动“放入”最后一个表达式?,ruby,Ruby,我正在将Project Euler解决方案作为语义实现。如果我可以强制Ruby自动输入最后一个表达式的值,那将非常有用。有办法做到这一点吗?例如: #!/usr/bin/env ruby -Ilib -rrubygems -reuler 1.upto(100).into {|n| (n.sum.squared - n.map(&:squared).sum) 我意识到我可以简单地put行,但出于其他原因(我计划eval测试中的文件,与预期输出进行比较),我希望避免显式的put。此外,它
#!/usr/bin/env ruby -Ilib -rrubygems -reuler
1.upto(100).into {|n| (n.sum.squared - n.map(&:squared).sum)
我意识到我可以简单地put
行,但出于其他原因(我计划eval
测试中的文件,与预期输出进行比较),我希望避免显式的put
。此外,它还为解决方案分配了额外的四个字符。:)
有什么我可以做的吗?eval的结果是最后执行的操作,就像ruby中的任何其他代码块一样 正在做什么
puts eval(file_contents)
你有选择吗
编辑
您可以使用eval的第二个参数,即变量绑定
请尝试以下操作:
do_not_puts = true
eval(file_contents, binding)
在文件中:
....
result = final_result
if defined?(do_not_puts)
result
else
puts(result)
end
您可以尝试在irb下运行它,而不是直接在Ruby解释器下运行 看起来选项
-f--noprompt--noverbose
可能是合适的(
这些选项具有以下含义:
:不要使用-f
(或irbrc).irbrc
:不显示源代码行--noverbose
:不要在输出前加前缀(例如使用--noprompt
)=>
$_= 1.upto(100).into {|n| (n.sum.squared - n.map(&:squared).sum)
援引
echo nil.txt |/usr/bin/env/ruby-Ilib-rrubygems-reuler-p script.rb
,其中nil.txt是一个带有一个换行符的文件。在这种情况下,您将把放在哪里?我希望它隐式地出现在文件的最后一个表达式上。我不确定这是否可能,但如果可能,我想这里会有人知道。我可能是unc我希望文件的内容在shell中运行时(类似于-p
标志)被隐式地放在shell中,但是如果文件是eval
'dAha,则不应该有输出!这就完成了,只有打印额外换行(几乎无关紧要)的缺点。
#!/usr/bin/env irb -f --noprompt --noverbose -Ilib -rrubygems -reuler
'put your one-liner here'
$_= 1.upto(100).into {|n| (n.sum.squared - n.map(&:squared).sum)