かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[Ruby]cattr_accessorのソースを読んで見て知った事

行数的には約50行と少ないけど、結構ためになる!!
とりあえずRubyは、弱者なので知らないことだらけだ。

is_a?メソッド

Rubyで、Javaでいうinstanceof演算子やC#でいうis演算子みたいな動きをするものの存在を知った。
is_a?メソッド!

お試しコード
class Foo
end
class Bar
end

f = Foo.new
puts f.is_a?(Foo) # => true
puts f.is_a?(Bar) # => false

最後にハッシュを受け取るメソッド

Ruby on Railsのサンプルコードとかを見ると、よく最後の引数がハッシュのものがよく見られる。

f.bar("Hello", "world", {:a => true, :b => "hoge"})

みたいなヤツです。
ハッシュで渡すものは、オプション的な扱いなもので別に渡さなくても大丈夫っていうのが多い。
それの実装方法は、先ほどのis_a?メソッドを使ってハッシュかどうか判別している。
具体例を出すと下のような感じ。

def myprint *arg
  hash = arg.last.is_a?(Hash) ? arg.pop : {} # ここで引数の最後からHashを取り出してる!
  if hash[:concat]
    puts arg.join(" ") # concatにtrueが設定されてたら、引数で渡されたものをくっつけて出力
  elsif
    arg.each { |value| puts value } # concatにtrueが設定されてなかったら1つずつ出力
  end
end

myprint "Hello", "world", {:concat => true} # => Hello world
myprint "Hello", "world"                              # => Hello
                                                                   # => world

引数の最後がハッシュだったら取り出す。そうじゃなければ空のハッシュをダミーとして作る。
そうすれば、あとはお好きなようにって感じ。

#{ }の中はRuby式書けるんだよね

ダブルクォートで囲まれた文字列中の#{ }で囲まれた部分にはRubyの式が書ける。
よく使われる使い方としては、文字列中に変数の値を埋め込んだりとかかな。

10.times { |i| puts "こんにちは。あなたは#{i}番目の訪問者です" }

とても簡単じゃん。ふ~んって思ってたら、こういう使い方も出来るのか。。。と思ったコードがあった。

お試しコード
def fun value, greet
  puts "#{"こんにちは#{value}さん" if greet}今日もいい天気ですね。"
end

fun "太郎", true  # => こんにちは太郎さん今日もいい天気ですね。
fun "太郎", false # => 今日もいい天気ですね。

#{ }の中にif式とかも書けるんだよね。
出来るのは文法上当たり前だけど、その発想はなかったorz

投稿日時 : 2007年11月29日 23:33

Feedback

# re: [Ruby]cattr_accessorのソースを読んで見て知った事 2007/11/30 13:41 ddnp

すみません、中身は分かりませんが
『最期』というのは人がまさに死ぬときを言います。

# re: [Ruby]cattr_accessorのソースを読んで見て知った事 2007/11/30 23:18 かずき

本当だ。
ご指摘ありがとうございます。

タイトル
名前
Url
コメント