2017-03-01から1ヶ月間の記事一覧
ローカル変数のスコープ切り替え ローカル変数を使う時にいつも気になるのがスコープの存在です。 一旦、スコープの切り替えタイミングは クラス定義 モジュール定義 メソッド定義 の3つです。 上記3つのことを「スコープゲート」と呼びます。 v1 = 1 #→v1…
ブロック ブロックは {} もしくは do endキーワードで定義出来ます。 具体例を説明します。 ["1","2","3"].each do |i| puts i end # => ["1", "2", "3"] 文法書でよくある記述ですが、ブロックの前(do endキーワード) の前には 配列オブジェクト そして メ…
前回、動的メソッドを説明しました。今回は method_missingをまとめていきます。 mehod_missing メソッド呼び出しの際に見つからなかった際に呼び出されるメソッドです。 以下にコード例を書いておきます。 class TestMethod end obj = TestMethod.new obj.g…
動的メソッド 前回は 「動的ディスパッチ」をメインに説明しました。 今回は本丸である動的メソッドの説明を行います。 動的メソッド定義 動的メソッドとは動的にclassとモジュールにメソッドを追加出来ます。 使い方は簡単で「define_method メソッド名」を…
重複したプログラムをなくすには? この際に解決する方法は 動的メソッド と ゴーストメソッド があります。 今回は動的メソッドに絞って説明します。 動的ディスパッチ 動的メソッドの前に、動的ディスパッチを説明します。 動的ディスパッチとはメソッドを…
クラスの真相 Classクラスのインスタンスはクラス! クラスのメソッドはClassクラスのインスタンスメソッド Classクラスとは? クラス(ここでいうクラス名は大文字) はClassクラスのインスタンスである。 Stringクラスを例にとると String.class #Class ←Cl…
第二章(途中まで)書きます。 オープンクラスとは? 既存のクラスを再定義することです。 以下のコードを見て下さい。 これはStringクラスのメソッドを拡張した例です。 class String def dokkiri! return "!" end end p "test".class #String p "test".dokki…
メタプログラミングRuby第一章 第一章は分量も多くないため、頭の整理のため オブジェクト志向についてまとめておきます。 クラス 教科書通りの説明ですと、クラスとは「設計図」です。 よくある例ですと、たい焼きの型ですね オブジェクト志向は再利用を目…
はじめに これからメタプログラミングRubyを読んでわかったことをまとめていきます。 編集方針(随時更新) 基礎的なこともまとめる。 オライリー特有の「わかっているだろ?」的記述を出来る限り自分の 中で噛み砕いて説明