Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Ruby脚本中自动“放入”最后一个表达式?_Ruby - Fatal编程技术网

有没有办法在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。此外,它

我正在将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
。此外,它还为解决方案分配了额外的四个字符。:)


有什么我可以做的吗?

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
    :不要在输出前加前缀(例如使用
    =>

是否可以选择更改运行脚本的方式

script.rb:

$_= 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)