技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Ruby の勉強してみる(メソッドとか)

メソッド作ってその呼び出しをしてみる。
method.rb

def Sample
  puts "眠い"
end

Sample()

結果は自明。
ということで、次はこのメソッドを別ファイルから呼び出してみる。

method_call.rb

require("method")

Sample()


実行したら「眠い」が2行出たから、require メソッドは外部ファイルを結合だけじゃなくて実行もするのね。
ためしに include にしてみたら怒られた。
やっぱ何か動作が違うのか…。
Math を前回 include してるから何となく納得いかない。
ので、Mathが何処にあるか探してみる。
そしたら何か
「C:\ruby\share\ri\1.8\system\Math」が引っかかった。
って、ディレクトリの上に中身が yaml かよ。

--- !ruby/object:RI::MethodDescription 
aliases: []

block_params: 
comment: 
- !ruby/struct:SM::Flow::P 
  body: Computes the sine of <em>x</em> (expressed in radians). Returns -1..1.
full_name: Math::sin
is_singleton: true
name: sin
params: |
  Math.sin(x)    => float

visibility: public

どうも別言語かバイナリで書かれたライブラリへの参照設定というかキャストというか。その中間設定みたいなモノに見える。
なるほどね、何かライブラリをザクっと作ったら中間ファイル用意するだけで言語が拡張できると、、、
(RubyライブラリをほぼRuby純正で実装しないんだろーか?Pythonとかスクリプトだけど殆どのライブラリがPython実装なんだけどにゃー)
この中見ていったら切りなさそうなので停止。
アプローチ変えて、include というキーワードでぐぐってみる。
http://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html
includeはmoduleをクラス(モジュール)にインクルードして、メソッドを関数形式で呼べるようにし、extendは moduleをオブジェクト(インスタンス)にインクルードして、メソッドを特異メソッドとして追加します。
さーて早くも新出単語かぁ。
クラスはオブジェクト指向ではよくあるが、言語によって解釈まちまちだから鵜呑みにできないし、モジュールと区別するって事はまた特有概念でもあるんだろうか?
特異メソッドも C/C++ 系統の言語で見た記憶が無い。
もしかしたら Perl 辺りで弄ってそうだが、あいにく Perl はかろうじて読み書きできる程度だからキーワードとしての覚えが無い。

まぁやってくうちに覚えるでしょ。