タグ

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

  • Rubyでinvalidなバイト列を含むUTF-8文字列を扱う - yarbの日記

    Ruby 1.9系ではStringオブジェクトにエンコーディング情報が付加されていて、マルチバイトや複数エンコーディングを扱う日人としては嬉しい限りだけど、時々エンコーディング関連で例外が発生して落ちすぎるぐらい落ちるように感じるときがある。ちょっとイラッと来るけど、考えてみたら、例外を出さずに処理を進めてしまうことの弊害のほうが大きいだろうから、これはありがたいこと。 外部のHTMLを読み込んで正規表現でマッチするコードで、次のようなエラーが出た。 invalid byte sequence in UTF-8これは文字通り、UTF-8的におかしなシーケンスがあるということ。問題のHTMLを調べてみたら、UTF-8HTMLの中に、Shift_JISが混じってしまっていた。どうも、JavaScriptで突っ込んだ文字列らしい……。いかにもありそうなことだ。どの程度の頻度で世の中にそういう

    Rubyでinvalidなバイト列を含むUTF-8文字列を扱う - yarbの日記
    suginoy
    suginoy 2014/10/17
    2.1だとscrubがあるが。
  • 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の日記
    suginoy
    suginoy 2014/04/26
    “注意深く例外クラスの階層を設計したところで利用者は誰も気にしないんだから時間の無駄だと書いてある。1つのライブラリもしくは名前空間に付いて1つの例外を定義すれば十分だ”
  • じゃんけんごときにクラスなんて要るのか - yarbの日記

    CodeIQというプログラミング課題に挑戦するサイトに、Rubyでジャンケンクラスを作れという問題があったのでやってみた。すでに問題は読めなくなっているけど、こんな感じのJankenクラスを作れという。 $ irb > require './janken.rb' > left = Janken.new > right = Janken.new > left.versus(right) 左の人が勝ました。右「チョキ」左「グー」 > left.versus(right) 右の人が勝ちました。右「チョキ」左「パー」 : :繰り返しirbで実行できるように、とある。 問題を見た瞬間、これは問題自体がおかしいのではないかと思ったけど、やってみた。 # -*- coding: utf-8 -*- class Janken attr_reader :hand NAME = { goo: "グー", ch

    じゃんけんごときにクラスなんて要るのか - yarbの日記
    suginoy
    suginoy 2012/12/04
    出題者です。すいません…。
  • 1