Rubyでなにもしない

平成22年9月9日(木) 11時28分37秒
区分
Ruby
報告者:
chiba

こんにちは、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