Ruby Functions

前 - 次 - 目次

# 組込み関数

- ```
- `Array`
- `Float`
- `Integer`
- `String`
- `at_exit`
- `autoload`
- `binding`
- `caller`
- `catch`
- `chop`
- `chop!`
- `chomp`
- `chomp!`
- `eval`
- `exec`
- `exit`
- `exit!`
- `fail`
- `fork`
- `format`
- `gets`
- `global_variables`
- `gsub`
- `gsub!`
- `iterator?`
- `lambda`
- `load`
- `local_variables`
- `loop`
- `open`
- `p`
- `print`
- `printf`
- `proc`
- `putc`
- `puts`
- `raise`
- `rand`
- `readline`
- `readlines`
- `require`
- `select`
- `sleep`
- `split`
- `sprintf`
- `srand`
- `sub`
- `sub!`
- `syscall`
- `system`
- `test`
- `trace_var`
- `trap`
- `untrace_var`

## 組込み関数

Rubyには厳密な意味では関数はありませんが， `Kernel` モジュールで定義されているメソッドの一部は(全ての通常クラスから 関数形式で呼び出せるので)一般の言語における関数のように用 いられます．これらのメソッドを再定義する際には互換性を考えて 行なう必要があります．

`` str`

  strをコマンドとして実行し，その出力を文字列として 返します．このメソッドは``str``の形式で呼ばれます．

`Array(arg)`

  引数を配列に変換します．

`Float(arg)`

  引数を浮動小数点数に変換します．

`Integer(arg)`

  引数を整数に変換します． 引数が文字列であった場合には，0x, 0b, 0などのprefixに応じて それぞれ16進，2進，8進数として変換します．

`String(arg)`

  `Kernel#to_s`を用 いて，引数を文字列に変換します．

`at_exit`

  与えられたブロックをインタプリタ終了時に実行します．

`autoload(module, file)`

  moduleに最初にアクセスした時にfileを `require`するように設定し ます．moduleは文字列またはシンボルで指定します．

`binding`

  `eval`の第2引数として指定できる変数とメソッドの結 合情報を含むデータ構造を返します．

`caller([level])`

  level段上の呼出し元の情報を`$@`の形式 のバックトレース(文字列の配列)として返します．トップレベルで は空の配列を返します．callerの戻り値を`$@`に代入 することで例外の発生位置を設定できます．以下のようなコードで 呼出し関係のスタックトレースを表示できます．

  >     for c in caller(0)
  >       print c, "\n"
  >     end

`catch(tag){...}`

  ブロックを実行してその値を返します．ブロックの実行中に tag で指定されたのと同じ名前の `throw` が行われた場合は，その `throw`の値を戻り値とします．

  例えば以下のコードは10ではなく，25を返して， some_processは呼び出されません．

  >     def throw_exit
  >       throw :exit, 25
  >     end

  >     catch(:exit) {
  >        throw_exit
  >        some_process;
  >        10;
  >     }

`chop`
`chop!`

  システム変数`$_`を最後の文字を取り除いたものにし ます(終端が"\r\n"であれば2文字取り除きます)． `chop!`は文字列そのものを変更します．

`chomp([rs])`
`chomp!([rs])`

  システム変数`$_`をrsで指定される末尾 の文字列を取り除いたものにします． String#chomp参照．

`eval(expr[,binding])`

  exprとして与えられた文字列をRubyプログラムとして 解釈，実行します．省略可能な第2引数として`Proc`オ ブジェクトまたは`binding`の戻り値である束縛情報を 与えた場合，文字列をその環境で解釈，実行します．

`exec(command)`

  commandで指定されたコマンドを子プロセスとして起動 します．起動に成功した場合，この関数からは戻りません．

  複数の引数を指定した場合は，shellを経由せずに実行されます． この場合には空白やshellのメタキャラクタもそのまま渡されます．

  先頭の引数が2要素の配列であった場合，第1要素の文字列が実際に 起動するプログラムのパスであり，第2要素が「みせかけ」のプロ グラム名になります．

`exit([status])`

  Rubyプログラムの実行を終了します．statusとして整 数が与えられた場合，その値をRubyコマンドの終了ステータスとし ます．デフォルトはの終了ステータスは0です．

  `exit`は大域脱出 `SystemExit` を発行す ることによってプログラムの実行を終了させますので， 必要に応じて`rescue`節で捕捉することができます．

`exit!([status])`

  整数statusを終了ステータスとして，Rubyプログラム の実行を終了します．`exit!`は`exit`と は違って，例外処理などは一切行ないません． `fork`の後， 子プロセスを終了させる時などに用いられます．

`fork`

  `fork(2)`システムコールを使ってプロセスの複製を作 ります．親プロセスでは子プロセスのプロセスIDを，子プロセスで は`nil`を返します．ブロックを指定してとして呼び出された場 合には，生成した子プロセスで，ブロックを評価します．

`gets([rs])`
`readline([rs])`

  引数として与えられたファイル(なければ標準入力)をつなげた仮想 的なファイル(システム変数`$<`でアクセスできる) から一行読み込んで，文字列を返します．ファイルの終りに到達し た時には`nil`を返します．行の区切りは引数 rsで指定した文字列になります．rsのデフォ ルト値はシステム変数`$/`の値です．読み込んだ文字 列はシステム変数`$_`にもセットされます．

  `readline`は`gets`と同じ働きをしますが， EOFで例外`EOFError`を発生させます．

`global_variables`

  プログラム中で定義されている大域変数名の配列を返します．

`gsub(pattern[, replace])`
`gsub!(pattern[, replace])`

  システム変数`$_`の指す文字列内で patternにマッチする部分を全てreplaceに 置き換えた文字列を返します．引数replaceが省略され た時にはイテレータとして動作し，ブロックを評価した結果で置換 を行います．`gsub!`は`$_`の指している 文字列そのものを書き換えます．`gsub`メソッドは `$_`の値をコピーして，コピーの方を更新し， `$_`に代入します．

`iterator?`

  メソッドにブロックが与えられている時には真，そうでない時に偽 を返します．

`load(file[, priv])`

  fileから Ruby プログラムをロード・実行します． fileをロードするパスはシステム変数`$:` で決定されます．パス先頭の``~`'はユーザのホームディ レクトリに展開されます．

  省略可能な引数privが真のとき、 ロード・実行は内部的に生成される無名モジュールを トップレベルとして行われ，グローバルな名前空間を汚染しません．

`local_variables`

  現在のスコープで定義されているローカル変数名の配列を返します．

`loop`

  (中断されない限り)永遠にブロックの評価を繰り返します．

`open(file[, mode])`
`open(file[, mode]){...}`

  fileをオープンして， `File`オブジェクトを返します． modeは，`"r"`, `"r+"`, `"w"`, `"w+"`, `"a"`, `"a+"`のいずれかでファイルのアクセスモードを指定 します．`fopen(3)`を参照してください．

  ファイル名が`|`で始まる時には続く文字列をコマンド として起動し，コマンドの標準入出力に対してパイプラインを生成 します．

  注意: Perlと異なりコマンドは常に``|`'で 始まります．

  コマンド名が`"-"`である時，`open`は Rubyの子プロセスを生成し，その子プロセスとの間のパイプを返し ます．

  `open`がブロックとともに呼び出された時，`open` はファイルをオープンしてブロックを実行し， ブロックの実行が終了するとファイルをクローズします． つまり，以下のようになります．

  >     open(path, mode) do |f|
  >       ...
  >     end

  >     # 上記とほぼ同じコード
  >     f = open(path, mode)
  >     begin
  >       ...
  >     ensure
  >       f.close
  >     end

`p(obj)`

  objを人間に読みやすい形で出力します．以下のコード と同じです．

  >     print obj.inspect, "\n"

`print(arg1...)`

  引数を順に出力します．引数が与えられない時には変数 `$_`の値を出力します．文字列以外のオブジェクトが 引数として与えられた場合には，当該オブジェクトを文字列に変換 してから出力します．

  変数`$;`(出力フィールドセパレータ)に `nil`でない値がセットされている時には，各引数の間 にその文字列を出力します．変数`$\`(出力レコード セパレータ)に`nil`でない値がセットされている時に は，最後にそれを出力します．

`printf([port, ]format, arg...)`

  C言語のprintfと同じようにformatに従い引数を文字列 に変換して出力します．第1引数がIOのサ ブクラスのインスタンスであった場合はそのオブジェクトに対して 出力を行ないます．デフォルトは`$stdout`に出力しま す．Rubyにおけるformat指定子の拡張については `sprintf`の項を参照してください．

`proc`
`lambda`

  与えられたブロックから手続きオブジェクト(クラス `Proc` のインスタンス)を生成して返します．

`putc(ch)`

  文字chをデフォルト出力($>)に出力します．

`puts(obj...)`

  各objをデフォルト出力($>)に出力した後，改行します．

`raise([error_type,][message][,traceback])`
`fail([error_type,][message][,traceback])`

  例外を発生させます．引数が無い場合，直前の例外を再発生させます． 引数が一つの場合，引数が文字列であれば，その文字列をメッセー ジとする `RuntimeError` 例外を発生させ，引数が例外オブジェクトであった場合にはその例外を発生 させます．引数が二つの場合，第一引数で指定された例外を，第二引数を メッセージとして発生させます．この場合，例外は例外クラスまた は例外オブジェクトで指定します．

  第三引数が指定された場合にはそれは`$@`または `caller`で得られるスタック 情報です．

  発生した例外は変数 $! に格納されます．また例外が 発生したソースコード上の位置は変数 $@ に格納され ます．

  例外ではないクラスやオブジェクトを第一引数に指定した場合，実際 に発生する例外はそのクラスやオブジェクトの `exception`メソッドが返す値になります．(第二の形式 で文字列を指定した場合は除きます．）`exception`メソッ ドはオブジェクトを例外に変換した値を返すように定義しておく必要 があります．

  `raise` には `fail` という別名が定義さ れています．

`rand(max)`

  0からmaxまでの(maxを含まない)範囲の整数の乱数を発生します (`max`は正の整数)． 既に`srand`が呼ばれていなければ 自動的に`srand`を呼び出します。

  maxとして0を指定すると0から1を越えない範囲の実数 値で乱数を与えます．

`readlines([rs])`

  コマンドライン引数として与えられたファイル(なければ標準入力) をつなげた仮想的なファイルを全て読み込んで，その各行を要素と してもつ配列を返します．

  行の区切りは引数rsで指定した文字列になります． rsのデフォルト値はシステム変数 `$/`の値 です．

`require(feature)`

  featureで指定される Ruby ライブラリを必要に応じて ロードします．featureはロードするライブラリを指定 する文字列で，拡張子`.rb`が指定されている時はRuby スクリプト，拡張子`.so`が指定されている時は，バイ ナリモジュールをロードします．ただし，いくつかのアーキテクチャ ではバイナリモジュールのロードは提供されません．バイナリモジュー ルの拡張子はアーキテクチャ毎に `".o"`,`".dll"` などと異なっていますが，feature名の拡張子はいつも `.so`を用います．

  requireは実際にロードした時には `true`，既にロー ドされている時には`false`を返します．またロードし たfeatureの名前を(拡張子も含めて)，変数 `$"`に追加します．

`select(reads[, writes[, excepts[, timeout]]])`

  ``select(2)'`を実行します． reads/writes/execptsには入 力待ちするIO (またはそのサブクラス)の インスタンスの配列をわたします．

  timeoutは整数， `Float`, `Time`, または `nil` を指定します．`nil` を指定した時 にはIOがレディ状態になるまで待ち続けます．

  戻り値はtimeoutした時には`nil`を，そう でないときは3要素の配列を返し，その各要素が入力/出力/例外待 ちのオブジェクトの配列です(指定した配列のサブセット)．

`sleep([sec])`

  sec秒だけプログラムの実行を停止します． secに浮動小数点数を指定して1秒以下の指定もできます． secが省略された場合，明示的に起こさない限り (`SIGALRM`または他threadからの`run`)， 永久にスリープします．戻り値は実際にスリープした秒数です．

`split([sep[, limit]])`

  変数$_に格納された文字列をsepで指定さ れたパターンによってlimit個の要素に分割して配列に 格納します． 詳細は`String#split` を参照してください．

`sprintf(format...)`
`format(format...)`

  format文字列をC言語の`sprintf`と同じよ うに解釈し，引数をフォーマットした文字列を返します． format指定子はC言語の`sprintf`が受け付 けるものに加えて, %bを使うことができます．%bは数値の2進表示 を行ないます．Rubyには整数の大きさに上限がないので， `%b, %o, %x`に負の数を与えると(左側に無限に1が続 くとみなせるので)`..f`のような表示をします．絶対 値に符号を付けた形式で出力するためには`%-x`， `%+x`，`% x`のように指定します．

`srand([seed])`

  `rand`の乱数の 種を設定し，古い初期値を返します．初期値が省略 された時には現在の時間などを種にします．

`sub(pattern[, replace])`
`sub!(pattern[, replace])`

  システム変数`$_`の指す文字列内で patternにマッチする最初の部分をreplaceに 置き換えた文字列を返します．引数replaceが省略され た時にはイテレータとして動作し，ブロックを評価した結果で置換 を行います．`sub!`は`$_`の指している 文字列そのものを書き換えます．`sub`は `$_`の値をコピーして，コピーの方を更新し， `$_`に代入します．

`syscall(num, arg...)`

  numで指定された番号のシステムコールを実行します． 第2引数以降をシステムコールの引数として渡します．引数は文字 列または整数でなければなりません．

`system(command...)`

  commandを実行して，成功した時(サブプロセスが status 0で終了した時)には真を，失敗した時には偽を返します． 終了ステータスは変数`$?` で参照できます．

  複数の引数を指定した場合は，shellを経由せずに実行されます． この場合には空白やshellのメタキャラクタもそのまま渡されます．

  その他の挙動に関しては`exec` を参照してください．

`test(cmd, file [, file])`

  ファイルテストを行います．cmdは以下に示す文字列リテラル です．

  - 1つの引数を取るもの

    `?r`
      ファイルを実効 uid で読むことができる
    `?w`
      ファイルに実効 uid で書くことができる
    `?x`
      ファイルを実効 uid で実行することができる
    `?o`
      ファイルの所有者が実効 uid である
    `?R`
      ファイルを実 uid で読むことができる
    `?W`
      ファイルに実 uid で書くことができる
    `?X`
      ファイルを実 uid で実行することができる
    `?O`
      ファイルの所有者が実 uid である
    `?e`
      ファイルが存在する
    `?z`
      ファイルサイズが 0 である
    `?s`
      ファイルサイズが 0 でない(ファイルサイズを返す)
    `?f`
      ファイルはプレーンファイルである
    `?d`
      ファイルはディレクトリである
    `?l`
      ファイルはシンボリックリンクである
    `?p`
      ファイルは名前つきパイプ(FIFO)である
    `?S`
      ファイルはソケットである
    `?b`
      ファイルはブロック特殊ファイルである
    `?c`
      ファイルはキャラクター特殊ファイルである
    `?u`
      ファイルに setuid ビットがセットされている
    `?g`
      ファイルに setgid ビットがセットされている
    `?k`
      ファイルに sticky ビットがセットされている
    `?M`
      ファイルの最終更新時間
    `?A`
      ファイルの最終アクセス時間
    `?C`
      ファイルの inode 変更時間

  - 2つの引数を取るもの

    `?=`
      ファイル1とファイル2のタイムスタンプが等しい
    `?>`
      ファイル1の方がファイル2より更新時間が新しい
    `?<`
      ファイル1の方がファイル2より更新時間が古い
    `?-`
      ファイル1がファイル2にハードリンクされている
`throw(tag[, value])`

  同じtagを指定した`catch` まで一気に脱出します．もし，そのような`catch`がな い時にはプログラムの実行を終了させます．tagは文字 列またはシンボルで指定します．`catch`は同じメソッ ド内に存在する必要はありません．value は `catch`の戻り値になります．省略された時の valueは`nil`になります．

`trace_var(variable, command)`
`trace_var(variable) {...}`

  varで指定された大域変数の値が変更された時に評価さ れる文字列，または手続きオブジェクトをcommandで指 定します．traceを解除するためにはcommandに `nil`を指定するか， `untrace_var`を用います．

`trap(signal, command)`
`trap(signal) {...}`

  signalで指定された割り込みにたいするハンドラとし てcommandを指定します．signalはシグナ ル名かシグナルの番号，commandは文字列，またはブロッ クで指定します．commandとして`"SIG_IGN"`または `"IGNORE"`を指定した時にはそのシグナルを無視しま す(可能ならば)．`"SIG_DFL"`または `"DEFAULT"`を指定した時はデフォルトの動作を行ないます． `"EXIT"`を指定した時はシグナルを受け取ると(終了処 理を行った後)，exit status 0で終了します．

  シグナル `0` または `"EXIT"` はプログ ラムの終了を表しています．`"EXIT"` のハンドラはイ ンタプリタの実行終了直前に呼び出されます．

`untrace_var(variable[, command])`

  variableに対するcommandで指定したtrace を解除します．commandを省略した場合や commandとして`nil`を指定した場合には varに対する全てのtraceを解除します．削除された traceとして指定されていたオブジェクトを配列にいれて返します．

前 - 次 - 目次

matz@netlab.co.jp