タグ

ブックマーク / yarb.hatenadiary.org (3)

  • Rubyで自前の例外クラスを作るときExceptionではなくStandardErrorを継承する理由 - yarbの日記

    Rubyの例外について少し調べたので、まとめてみる。 多くのモダンな言語同様にRubyでは例外処理機構が組み込まれている。 ファイルを開こうと思ったらファイルが存在しなかった ネットワーク先のサーバが反応しなくてタイムアウトした 定義されていない(存在しない)メソッドを呼んだ 0で割り算をしてしまった など想定外の問題に遭遇したときに、その問題を無視せずプログラマが何らかの対応処理をするための枠組みを提供する。 C言語など古い言語では、関数からの戻り値でエラーコードを返し、それによって呼び出し側がエラー処理をその場で記述する。例えば、fopen(3)が失敗すると戻り値としてNULLが戻ってきてグローバル変数のerrnoに失敗の理由を示すエラーコードが設定される。 #include <stdio.h> #include <string.h> #include <errno.h> int ma

    Rubyで自前の例外クラスを作るときExceptionではなくStandardErrorを継承する理由 - yarbの日記
    ainame
    ainame 2013/06/27
  • Rubyのensureはどのぐらい強いか - yarbの日記

    catch(:goto) do begin puts "hey" raise rescue puts "rescued" throw :goto exit 1 ensure puts "ensure" end end puts "caught" % ruby rescue.rb hey rescued ensure caughtなるほどなぁ。exitよりもensure。ensureの利用目的を考えると、そうなのかも。 しかし、exit!という強いやつもいる。 catch(:goto) do begin puts "hey" raise rescue puts "rescued" exit! ensure puts "ensure" end end puts "caught" % ruby rescue.rb hey rescued

    Rubyのensureはどのぐらい強いか - yarbの日記
    ainame
    ainame 2012/10/30
  • シュワルツ変換とRuby - yarbの日記

    ソートのときに比較関数が何らかの計算を含む場合、計算に重複が出て処理性能が落ちる。これを避けるために、あらかじめ計算結果と一緒に連想配列のような入れ物を別途用意して並べ直すのが一般的なようだ。1994年にPerlハッカーのランダル・シュワルツがPerlイディオムとして書いたことから広く「シュワルツ変換」と呼ばれている、とWikipediaにある。Lispではもともとasoccを使ったりして同様のことをやっていたので、Perlのイディオムに付いた名前が一般化したということらしい。 ちょっと検索すると、いろんな言語でのシュワルツ変換が出てくるけど、Ruby では何と組み込みだった。Enumerable#sortには、以下の解説が。 As of Ruby 1.8, the method Enumerable#sort_by implements a built-in Schwartzian Tr

    シュワルツ変換とRuby - yarbの日記
  • 1