2017-03-01から1ヶ月間の記事一覧

メタプログラミング ruby ローカル変数スコープ

ローカル変数のスコープ切り替え ローカル変数を使う時にいつも気になるのがスコープの存在です。 一旦、スコープの切り替えタイミングは クラス定義 モジュール定義 メソッド定義 の3つです。 上記3つのことを「スコープゲート」と呼びます。 v1 = 1 #→v1…

メタプログラミング 第四章 ブロック

ブロック ブロックは {} もしくは do endキーワードで定義出来ます。 具体例を説明します。 ["1","2","3"].each do |i| puts i end # => ["1", "2", "3"] 文法書でよくある記述ですが、ブロックの前(do endキーワード) の前には 配列オブジェクト そして メ…

メタプログラミングRuby 第三章 method_missing

前回、動的メソッドを説明しました。今回は method_missingをまとめていきます。 mehod_missing メソッド呼び出しの際に見つからなかった際に呼び出されるメソッドです。 以下にコード例を書いておきます。 class TestMethod end obj = TestMethod.new obj.g…

メタプログラミングRuby 第三章メソッド 動的メソッド

動的メソッド 前回は 「動的ディスパッチ」をメインに説明しました。 今回は本丸である動的メソッドの説明を行います。 動的メソッド定義 動的メソッドとは動的にclassとモジュールにメソッドを追加出来ます。 使い方は簡単で「define_method メソッド名」を…

メタプログラミングRuby第三章 動的ディスパッチ

重複したプログラムをなくすには? この際に解決する方法は 動的メソッド と ゴーストメソッド があります。 今回は動的メソッドに絞って説明します。 動的ディスパッチ 動的メソッドの前に、動的ディスパッチを説明します。 動的ディスパッチとはメソッドを…

メタプログラミングRuby第二章(2.2~)

クラスの真相 Classクラスのインスタンスはクラス! クラスのメソッドはClassクラスのインスタンスメソッド Classクラスとは? クラス(ここでいうクラス名は大文字) はClassクラスのインスタンスである。 Stringクラスを例にとると String.class #Class ←Cl…

メタプログラミングRuby二章(2.2途中まで)

第二章(途中まで)書きます。 オープンクラスとは? 既存のクラスを再定義することです。 以下のコードを見て下さい。 これはStringクラスのメソッドを拡張した例です。 class String def dokkiri! return "!" end end p "test".class #String p "test".dokki…

メタプログラミング1章 準備

メタプログラミングRuby第一章 第一章は分量も多くないため、頭の整理のため オブジェクト志向についてまとめておきます。 クラス 教科書通りの説明ですと、クラスとは「設計図」です。 よくある例ですと、たい焼きの型ですね オブジェクト志向は再利用を目…

メタプログラミングRubyを読む

はじめに これからメタプログラミングRubyを読んでわかったことをまとめていきます。 編集方針(随時更新) 基礎的なこともまとめる。 オライリー特有の「わかっているだろ?」的記述を出来る限り自分の 中で噛み砕いて説明