PIB - Ruby

公式サイト等

win32 binary

仕様

単独実行形式の生成

バージョンの混在

参考になるページ等

Tips

クラス名として有効か?

def isClassname? object, classname
  object.const_defined?(classname) && object.const_get(classname).kind_of?(Class)
end
トップレベルの場合は object に Object を渡すと良い?

メソッド名をハードコーディングしない再起

実行中のメソッド名は Kernel.#__method__, Kernel.#__callee__ で取得出来ます。
Object.#send に渡すと、メソッド名をハードコーディングせずに再起出来ます。
例えば、マニュアルのメソッド定義(1.8.7)にある、階乗(factorial)の例が以下のように書けます。
def fact(n)
  if n < 1
    raise "num is not potitive integer"
  elsif n == 1
    1
  else
    n * send(__method__, n - 1)
  end
end
ただ、末尾再起の最適化が効かない気がするので実行効率悪そうですが。
Shebang で ruby のパスを以下のように決め打ちしていると ruby のインストールディレクトリが異なる環境で実行出来ないだけでなく、 rbenv 等による実行環境のバージョン指定が機能しない。
#!/usr/bin/ruby
Shebang は以下のように書くことで ruby のパスが自動的に解決されるようにしておく方が良い。
#!/usr/bin/env ruby
または
#!/bin/sh
exec ruby -x "$0" "$@"
#!ruby
# coding: utf-8

関連