2011-07-14 3 views
2

私はプロジェクトのオイラーソリューションを意味論的な意味でRuby one-linersとして実装しています。 Rubyに最後の式の値を自動的に与えるように強制することができれば、非常に便利です。これを行う方法はありますか?たとえば:Rubyスクリプトの最後の式を自動的に `puts`する方法はありますか?

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

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

私は、私はでき単にputsラインを実現しますが、他の理由のために、私は明示的なputsを避けたい(私が期待される出力と比較するため、テストでファイルをevalする予定)。また、それは解決のために私に余分な4文字を割り当てます。 :)

私にできることはありますか?

+0

この場合、どこに 'puts'を入れますか? – tadman

+0

ファイルの最後の式に暗黙のうちに書いておきたいです。私はそれが可能であるかどうかは確信していませんが、もしあれば、私はここの誰かが知っていると考えました。 –

答えて

2
あなたは

を結合変数は、次のことを試しているのevalの第二引数を利用することができます

EDIT

ruby​​インタプリタの直下ではなく、irbの下で実行してみてください。

それは(

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

'put your one-liner here' 

オプションの意味は-f --noprompt --noverboseが適しかもしれないオプションのように思える:

  • --noverbose.irbrc(またはIRBRCを使用しないでください)::。

    • -f行いますソース行を表示しない
    • --noprompt: 。 =>
  • +0

    Aha!これはトリックですが、余分な改行を印刷することの(わずかな)欠点のみがあります。 –

    0

    のevalの結果は、最後はただ

    puts eval(file_contents) 
    

    あなたのためのオプションをしている

    ルビーの他のコードブロックのような操作を実行していますか?

    do_not_puts = true 
    eval(file_contents, binding) 
    

    、ファイル内:

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

    私は不明確かもしれません。シェルの '-p'フラグに似ていますが、実行時にファイルの内容を暗黙的に入れておきたいのですが、ファイルが' eval''dの場合は出力しません。 –

    +0

    私の答えを更新しました – keymone

    0
    result = calculate_result 
    
    puts result if File.exist?(__FILE__) 
    
    0

    スクリプトの実行方法を変更するオプションはありますか?

    script.rb:

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

    はnil.txtは、単一の改行を持つファイルである echo nil.txt | /usr/bin/env/ruby -Ilib -rrubygems -reuler -p script.rbと起動します。

    関連する問題