Rubyでなにもしない

区分
Ruby
報告者

こんにちは、chibaです!
最近、文字列を場合に応じてUTF-8(デフォルト)と、sjisに切り換えて文字を生成したいということがありました。
自分としては、

"こんにちは".send(if sjis? then :tosjis else なにもしない end)

と書きたかったのですが、Rubyでなにもしないメソッドってなんだったかなーと探してもなかなか見付かりません。 Haskellでいうid、LISP系では、identityというのが多いのですが、ruby identityでググったら、

  • Ruby 1.9 - Feature #841: Object#self - Ruby Issue Tracking System
    という一連のスレッドがみつかりました。
    なるほど、提案はされているもののリジェクトされてるんですね。
    高階手続きに馴染んでいる人ならば、identityの有用性は体験していると思うのですが、馴染みのない人からは、identityみたいに何もしないでそのまま受け取った値を返すものなんて何に使うの?という意見は割とFAQかなと思います。
    この議論中で
class Object
  def identity() self; end
end

というのが例として挙げられていました。これを使えば、

"こんにちは".send(if sjis? then :tosjis else :identity end)

"こんにちは".send(sjis? ? :tosjis : :identity)

と書ける訳ですね。
それで結局自分はどうしたかというと、Objectにメソッドを定義するのも気が引けたので

str = "こんにちは"
if sjis? then 
  str.tosjis
else
  str
end

とか、

str = "こんにちは"
sjis? ? str.tosjis : str

と書くことにしました。
これはこれで妥当ですね。 ■

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa