2019-10-01から1ヶ月間の記事一覧

添付ライブラリ: FileUtils編

FileUtilsは「添付ライブラリ」を称しつつ、モジュールとして実装されているので、includeで呼び出すか、もしくはクラスメソッドのように、FileUtnils.XXXのように呼び出す必要がある。 はずなんだけど、なぜかrequireでしか呼び出せず、リファレンスにもそ…

添付ライブラリ: yaml & json & csv

yamlはハッシュと配列を表現するためのフォーマットで、rubyスクリプト上でも文字列として扱うことが出来る。 8] pry(main)> yaml_data = <<-DATA [8] pry(main)* - red [8] pry(main)* - green [8] pry(main)* - yello [8] pry(main)* DATA => "- red\n- gr…

添付ライブラリ: テキスト編

StringIOと呼ばれるクラスは、インスタンスの生成時に与えられた文字列やputsで与えらた文字列を「バッファ(変数)」に格納し、またバッファに入った文字列をgetsやreadlineで読み込むことが出来る。 バッファと聞いて、特殊な仕組みが裏にあると思いきや、…

添付ライブラリ: ネットワーク

TCP Server Class これでTCP用の簡易アプリケーションサーバーを構築することが出来る。 require "socket" server = TCPServer.new 10080 while(true) do client = server.accept puts client.inspect client.puts "<p1>Hello Server</p1>" client.close end chromeだ…

特異メソッド

特異メソッドは、定義すれば滅多に使われないようにみえて、実は「クラスメソッド」という形で多用されている。 クラスメソッドは「Classクラス」にメソッドを定義して実装しない限り、すべて、「Classクラスのインスタンス」の特異メソッドである。 特異メ…

Class定義

指定したクラスのコンテキストでブロックを評価するclass_evalというメソッドがある。 これはクラスに新しいメソッドを追加したりするのに用いることが出来る。すでに全く同じようなメソッドinstance_evalも学習している。 instance_evalはブロックを使って…

Proc & Lambda & Method

ブロックは原則宣言したその場で評価が行われるが、この評価を後から実施したい場合があり、これが出来るのがProcやlambdaの利点となっている。 また、ブロックはyeildで、ブロックの渡し先で実行を行うことが出来るが、渡された先で更に別のメソッドにブロ…

ブロック

C#にはusingと呼ばれる構文が存在し、引数で受けたオブジェクトに対して処理を行ったあと、またはその処理の中で例外が発生したあと、必ずdisposeというメソッドを呼び出し、引数で受けたオブジェクトの廃棄を行う。 これをRuby風に書くと以下のようになる。…

動的ディスパッチ/メソッドの使い方

動的なメソッド生成は同じような役割を持つメソッドを少しづつ役割を変えて、動的に生成することが出来る。 class Computer def initialize(computer_id, data_source) @id = computer_id @data_source = data_source end def self.define_component(name) d…

メソッド探索の注意点

メタプログラミングRuby、「月曜日」の最後のクイズから。 module Printable def print p "Print in Printable Module!" end def prepare_cove p "Prepare Cover!" end end module Document def print_to_screen prepare_cove format_for_screen print end d…

Rubyの継承・生成関係を整理する。

まずは「メタプログラミングRuby」のクイズから Objectのクラスは何? Object自体がクラスであり、そしてクラス自体もClassクラスのインスタンスとして生成された。よってObjectクラスのクラスは「Classクラス」 Moduleのスーパークラスは何? Moduleも「modu…