内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
ruby
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Ruby ====== 自然で直感的な記述、分かりやすい構文、オブジェクト指向、関数型言語的なアプローチ、強力なリフレクション等など、言語大好き人間には非常に魅力的なスクリプト言語 ===== Ruby実行環境 ===== * Ruby C言語で書かれた公式のRubyインタプリタ * Rubinus C言語で書かれた別のインタプリタ * [[JRuby]] Java言語で書かれたRubyインタプリタ、JVM上で動作する * [[http://code.google.com/p/xruby/|XRuby]] 実行環境というかコンパイラ。Javaバイトコードに変換する。 * IronRuby .NET上の実行環境。 ===== メモ ===== * [[rvm]] * [[rubygems]] * [[ruby:flock]] ===== Webフレームワーク ===== * [[rails|Ruby On Rails]] * [[Sinatra]] ===== ライブラリ ===== * [[ruby:hpricot]] - 軽量HTMLパーザ * [[ruby:redcloth]] - TextileからHTMLへのコンバータ ===== インストール ===== パッケージ管理で debian、ubuntu # aptitude install ruby MacOSX # port install ruby 自分で make する <code> # ./configure --prefix=/usr/local --program-suffix=1.9 # make # make install </code> /usr/local/bin/ruby1.9 にインストールされる ===== クラス変数の定義 ===== @@を使う。変数が初期化されていないとエラーになるので嫌な感じ <code ruby> class Hoge def self.hoge= v @@hoge = v end def self.hoge @@hoge end end Hoge.hoge = "ほげ" p Hoge.hoge </code> クラスの特異メソッドとしてアクセサを作成する、初期化されていなくてもエラーにならない。@@hogeという変数とは無関係。 <code ruby> class Hoge class << self attr_accessor(:hoge) end end Hoge.hoge = "ほげ" p Hoge.hoge </code> ===== ブロック付きメソッド ===== <code ruby> class Hoge def initialize @hoge = "ほげ" @a = [1,2,3] end # ブロックを引数にとる場合は引数に&を付けて、最後の引数に def hoge(a, b, c, &block) yield a, b end # ブロック引数は省略できる def hoge(a, b, c) yield a, b end # ブロックが渡されてるときのみブロックを実行 def hoge2(h, &block) @hoge = h yield @hoge if not block.nil? end # または def hoge2(h) @hoge = h yield @hoge if bloc_given? end # ブロックをインスタンスフィールドのメソッドに渡し、ブロック処理を委譲 def hoge3(&block) @a.each &block end end </code> ===== 基本的なこと ===== ==== コンストラクタ ==== initializeはコンストラクタが呼び出すprivateメソッド。親クラスのinitializeは子クラスをnewしたときに呼ばれない。 ==== privateメソッド ==== レシーバの省略記述しかできないメソッドが private。レシーバを省略した場合は自分自身がレシーバであると解釈されるので、自分のクラス内部からしかアクセスできないという事になる。 子クラスは親クラスのメソッドへアクセスするときにレシーバを省略できるので、子クラスから親クラスの private メソッドを呼び出せる ==== インスタンス変数 ==== インスタンス変数は private 変数だが、親クラスの private 変数にもアクセスできる。 ==== 関数 ==== (ここの理解は怪しい) Rubyにおける関数は Object の private メソッドである(実際は Kernel モジュールに定義されている) トップレベルに関数を定義すると、Objectの private メソッドとして定義される。すべてのクラスは Object のサブクラスなのでどのクラスの内部からでもprivateメソッドとして呼び出せる。 <code ruby> def hoge puts "aaa" end class Fuga def test hoge end end fuga = Fuga.new fuga.private_methods.include?("hoge") # => true fuga.test # => "aaa" と表示 </code> Objectクラス自身もObjectを継承したClassクラスのインスタンスなので、関数はクラスメソッドとしても定義される。 <code ruby> def hoge puts "aaa" end class Fuga end Fuga.private_methods.include?("hoge") # => true class Piyo hoge # => "aaa" と表示 end </code> トップレベルはmainという名前のObjectクラスのインスタンスの中であるので、トップレベルで呼び出せる <code ruby> def hoge puts "aaa" end hoge # => "aaa" と表示 </code> ということは… <code ruby> @a = "あ" def hoge puts @a end hoge # => "あ" と表示される </code> ただし private メソッドとして定義されるので <code ruby> def hoge end self.hoge # Error </code> という呼び出しはできない。
ruby.txt
· 最終更新:
2015/07/29 11:07
by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ