.. 12-prevasives .. _label12: 12. 標準的なオブジェクト群 ================================== ここでの『広く使われている』は、すべてのプログラムで使われているオブジェクトを意味しています。以下のオブジェクトが定義されています。 .. _label12.1: 12.1 広く使われているオブジェクト ---------------------------------- .. index: single: Object .. _label12.1.1: 12.1.1 Object ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : 無し ``Object`` オブジェクトはルートとなるオブジェクトです。すべてのクラスは ``Object`` のサブクラスです。 以下のプロパティやメソッドを提供します。 * ``$(o.object-length)`` : オブジェクトのメソッドとプロパティの総数 * ``$(o.object-mem )`` : がオブジェクトのプロパティやメソッドであった場合は ``true`` を返します。 * ``$(o.object-add )`` : オブジェクトにプロパティを追加した新しいオブジェクトを返します。 * ``$(o.object-find )`` : オブジェクトのメソッドやプロパティを取得します。これは ``$(o.)`` と等価ですが、変数は定数でなくても構いません。 * ``$(o.object-map )`` : オブジェクト全体に対して関数を適用します。この関数は二つの引数を取り、一つ目はプロパティの名前で、二番目にはプロパティの値を指定します。結果は関数によって返される値が適用された、新しいオブジェクトを返します。 * ``$(o.object-foreach)`` : ``object-foreach`` は ``object-map`` と等価ですが、別の文法を適用できます。 :: o.object-foreach(, ) 例えば、以下の関数はオブジェクト ``o`` のすべてのプロパティを表示します。 :: PrintObject(o) = o.object-foreach(v, x) println($(v) = $(x)) ``export`` 文は ``object-foreach`` の内部に適用できます。以下の関数ではオブジェクトのプロパティ名を収集します。 :: FieldNames(o) = names[] = o.object-foreach(v, x) names[] += $(v) export return $(names) .. index: single: Map .. _label12.1.2: 12.1.2 Map ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Map`` オブジェクトは値から値を返す辞書です。 ```` の値は単純な型のみが使用できます。具体的には、整数型、浮動小数点型、文字列型、ファイル型、辞書型、そして単純な型で構成された配列です。 Mapオブジェクトは以下のメソッドを提供します。 * ``$(o.length)`` : 辞書に格納されているアイテムの総数 * ``$(o.mem )`` : ```` が辞書に定義されている場合は ``true`` を返します。 * ``$(o.add , )`` : 辞書にプロパティを追加した、新しい辞書を返します。 * ``$(o.find )`` : 辞書から対象のプロパティを取得します。 * ``$(o.keys)`` : 辞書の中にあるすべてのキーの配列をアルファベット順で取得します。 * ``$(o.values)`` : 辞書の中にあるすべての値の配列を、キーのアルファベット順で取得します。 * ``$(o.map )`` : 一つ目はプロパティの名前で、二番目にはプロパティの値を指定します。結果は関数によって返される値が適用された、新しいオブジェクトを返します。 * ``$(o.foreach)`` : ``foreach`` 文は ``map`` と等価ですが、別の文法を適用できます。 :: o.foreach(, ) 例えば、以下の関数はオブジェクト ``o`` のすべてのプロパティを表示します。 :: PrintObject(o) = o.foreach(v, x) println($(v) = $(x)) ``export`` 文は ``object-foreach`` の内部に適用できます。以下の関数では辞書のプロパティ名を収集します。 :: FieldNames(o) = names = o.foreach(v, x) names += $(v) export return $(names) キーが文字列である場合には単純な記法が用意されています。キー-値のテーブルは ``$|key|`` の文を用いて定義することができます(パイプシンボル ``|`` の数は、多様性のためにいくらでも使うことができます)。 :: $|key 1| = value1 $||key1|key2|| = value2 # キーは key1|key2 X = $|key 1| # Xにプロパティの値 $|key 1| を定義 通常用いる修飾子も適用できます。式 ``$`|key|`` はキーの遅延評価として解釈され、また式 ``$,|key|`` は通常の評価を行います。 .. index: single: Number .. _label12.1.3: 12.1.3 Number ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Number`` オブジェクトは整数や浮動小数点の親オブジェクトです。 .. index: single: Int .. _label12.1.4: 12.1.4 Int ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Number`` ``Int`` オブジェクトは整数を表現します。 .. index: single: Float .. _label12.1.5: 12.1.5 Float ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Number`` ``Float`` オブジェクトは浮動小数点を表現します。 .. index: single: Sequence .. _label12.1.6: 12.1.6 Sequence ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Sequence`` オブジェクトは一次元的に成分が格納されている、一般的なオブジェクトを表現します。このオブジェクトは以下のメソッドを提供しています。 * ``$(s.length)`` : シーケンスの長さを返します。 * ``$(s.map )`` : シーケンスのプロパティ全体に対して関数を適用します。この関数は一つの引数を取ります。結果は関数によって返される値からなる、新しいシーケンスを返します。 * ``$(s.foreach)`` : ``foreach`` 文は ``map`` と等価ですが、別の文法を適用できます。 :: s.foreach() 例えば、以下の関数ではシーケンスのすべての成分を表示します。 :: PrintSequence(s) = s.foreach(x) println(Elem = $(x)) ``export`` 文は ``foreach`` の内部に適用できます。以下の関数はシーケンスの0の数を数えます。 :: Zeros(s) = count = $(int 0) s.foreach(v) if $(equal $(v), 0) count = $(add $(count), 1) export export return $(count) * ``$(s.forall )`` : シーケンスの各々の成分が、与えられた関数の評価を満足しているかどうか調べます。 * ``$(s.exists )`` : シーケンスに与えられた関数の評価を満足するような成分があるかどうか調べます。 * ``$(s.sort )`` : シーケンスをソートします。 ```` は比較用の関数です。この関数は二つの成分 ``(x, y)`` を持つシーケンスを引数に取り、x,yを比較して、もし x < y であったのなら負の値を返し、 x > y であったなら正の値を返し、二つの成分が等価であったなら0を返します。 :: osh> items = $(int 0 3 -2) osh> items.forall(x => $(gt $x, 0)) - : bool = false osh> items.exists(x => $(gt $x, 0)) - : bool = true osh> items.sort($(compare)) - : Array = -2 3 0 .. index: single: Array .. _label12.1.7: 12.1.7 Array ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Sequence`` ``Array`` は自由にアクセスできるシーケンスです。このオブジェクトは以下の追加メソッドを提供しています。 * ``$(s.nth )`` : シーケンスの ``i`` 番めの成分を返します。 * ``$(s.rev )`` : 逆転させたシーケンスを返します。 .. index: single: String .. _label12.1.8: 12.1.8 String ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Array`` .. index: single: Fun .. _label12.1.9: 12.1.9 Fun ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Fun`` オブジェクトは以下のメソッドを提供しています。 * ``$(f.arity)`` : 関数の場合はアリティ(関数が取る引数の個数)を返します。 .. index: single: Rule .. _label12.1.10: 12.1.10 Rule ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Rule`` オブジェクトはビルドルールを表現します。これは現在なんのメソッドも持っていません。 .. index: single: Target .. _label12.1.11: 12.1.11 Target ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Target`` オブジェクトは指定したターゲットファイルの情報を収集しているオブジェクトです。 * ``target`` : ターゲットファイル * ``effects`` : ターゲットがビルドされたときに、副次的に修正されるであろうファイル群 * ``scanner_deps`` : ターゲットがスキャンできるようになる前にビルドしなければならない静的な依存関係 * ``static-deps`` : 静的に定義されている、ターゲットの依存関係 * ``build-deps`` : 静的、あるいはスキャンされた依存関係を含む、ターゲットに対するすべての依存関係 * ``build-values`` : ビルドに関係している、すべての依存関係の値 * ``build-commands`` : ターゲットをビルドするためのコマンド * ``output-file`` : ``--output-*`` オプション(A.を参照)を用いて、出力が適当なファイルに書き込まれるような場合、このプロパティはファイル名を表します。そうでない場合は ``false`` を示します。 このオブジェクトは以下のメソッドをサポートしています。 * ``find(file)`` : 与えられたファイルのターゲットオブジェクトを返します。指定したターゲットがプロジェクトの一部でない場合は ``RuntimeException`` を送出します。 * ``find-optional(file)`` : 与えられたファイルのターゲットオブジェクトを返します。指定したターゲットがプロジェクトの一部でない場合は ``false`` を返します。 .. note:: ターゲットの情報は動的に構築されるので、あるノードの ``Target`` オブジェクトは異なる箇所で異なった値を含む場合があります。 ``Target`` の情報が完全にするためのもっとも簡単な方法は、対象のターゲットファイルに依存しているルール中、もしくは対象のターゲットファイルの依存関係の中で ``Target`` オブジェクトを計算することです。 .. index: single: Node .. _label12.1.12: 12.1.12 Node ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Node`` オブジェクトはファイルやディレクトリの親オブジェクトです。このオブジェクトは以下の操作をサポートしています。 * ``$(node.stat)`` : ファイルの ``stat`` オブジェクトを返します。もしファイルがシンボリックリンクであったなら、 ``stat`` の情報はリンク先になります。リンク自身ではありません。 * ``$(node.lstat)`` : ファイルか、シンボリックリンクの ``stat`` オブジェクトを返します。 * ``$(node.unlink)`` : ファイルを消去します。 * ``$(node.rename )`` : ファイルをリネームします。 * ``$(node.link )`` : このファイルのハードリンクを ```` に生成します。 * ``$(node.symlink )`` : このファイルのシンボリックリンクを ```` に生成します。 * ``$(node.chmod )`` : このファイルのパーミッションを変更します。 * ``$(node.chown , )`` : このファイルの所有者とグループIDを変更します。 .. index: single: File .. _label12.1.13: 12.1.13 File ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Node`` ``File`` オブジェクトはファイル名を表現します。 .. index: single: Dir .. _label12.1.14: 12.1.14 Dir ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Node`` ``Dir`` オブジェクトはディレクトリ名を表現します。 .. index: single: Channel .. _label12.1.15: 12.1.15 Channel ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Channel`` オブジェクトは一般的なIOチャネルを表現します。このオブジェクトは以下のメソッドを提供しています。 * ``$(o.close)`` : チャネルを閉じます。 * ``$(o.name)`` : チャネルに関係しているファイル名を返します。 .. index: single: InChannel .. _label12.1.16: 12.1.16 InChannel ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Channel`` ``InChannel`` は入力チャネルです。変数 ``stdin`` は標準入力チャネルです。 このオブジェクトは以下のメソッドを提供しています。 * ``$(InChannel.fopen )`` : 新しい入力チャネルを開きます。 * ``$(InChannel.of-string )`` : 文字列を入力として、新しい入力チャネルを開きます。 * ``$(o.read )`` : チャネルから、与えられた数だけ文字を読み込みます。 * ``$(o.readln)`` : チャネルから一行を読み込みます。 .. index: single: OutChannel .. _label12.1.17: 12.1.17 OutChannel ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Channel`` ``OutChannel`` は出力チャネルです。変数 ``stdout`` と ``stderr`` は標準出力とエラーチャネルです。 このオブジェクトは以下のメソッドを提供しています。 * ``$(OutChannel.fopen )`` : 新しい出力チャネルを開きます。 * ``$(OutChannel.string)`` : 文字列を書き込む、新しい出力チャネルを開きます。 * ``$(OutChannel.to-string)`` : 出力チャネルの現在の文字列を取得し、出力チャネルは ``OutChannel.open-string`` として生成します??? * ``$(OutChannel.append)`` : ファイルを追加した、新しい出力チャネルを開きます。 * ``$(c.flush)`` : 出力チャネルをクリアします。 * ``$(c.print )`` : チャネルに文字列を出力します。 * ``$(c.print )`` : チャネルに、改行コードを付与した文字列を出力します。 .. index: single: Location .. _label12.1.18: 12.1.18 Location ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Location`` ``Location`` オブジェクトはファイルの位置を表現します。 .. index: single: Exception .. _label12.1.19: 12.1.19 Exception ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Exception`` オブジェクトは例外の基底となるオブジェクトとして用いられます。このオブジェクトはなんのプロパティやメソッドを持ちません。 .. index: single: RuntimeException .. _label12.1.20: 12.1.20 RuntimeException ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Exception`` ``RuntimeException`` オブジェクトはランタイムシステムからの例外を表現します。このオブジェクトは以下のプロパティを持ちます。 * ``position`` : 例外が送出された位置を表現している文字列 * ``message`` : 例外のメッセージを保持している文字列 .. index: single: UnbuildableException .. _label12.1.21: 12.1.21 UnbuildableException ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Exception`` ``UnbuildableException`` オブジェクトはターゲットがビルドできないことを知らせるために用いられます。このオブジェクトは ``target-exists()`` のような関数を使った場合に捕えられます。この例外は以下のプロパティを持ちます。 * ``target`` : どのターゲットがビルドできないのかを示します。 * ``message`` : 例外のメッセージを含んでいる文字列 .. index: single: Shell .. _label12.1.22: 12.1.22 Shell ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 親オブジェクト : ``Object`` ``Shell`` オブジェクトはシェルコマンドとして利用できるビルドイン関数のコレクションを含んでいます。 あなたはこのオブジェクトにメソッドを追加し拡張することで、エイリアスを定義することができます。このクラスの中にあるすべてのメソッドは一つの引数をとる必要があります。引数には引数のリストが含まれた、単純な配列が与えられます。 * ``echo`` ``echo`` 関数は引数を標準出力チャネルに表示します。 * ``jobs`` ``jobs`` メソッドは現在実行しているコマンドの状態を表示します。 * ``cd`` ``cd`` 関数はカレントディレクトリを変更します。カレントディレクトリは現在のスコーピングルールに従うことに注意してください。例えば、以下のプログラムでは ``foo`` ディレクトリのファイルをリストしていますが、カレントディレクトリは変更されません。 :: section echo Listing files in the foo directory... cd foo ls echo Listing files in the current directory... ls * ``bg`` ``bg`` メソッドはバックグラウンドにジョブを移します。ジョブが中断(suspended)されている場合、そのジョブは再開されます。 * ``fg`` ``fg`` メソッドはジョブをフォアグラウンドに持っていきます。ジョブが中断されている場合、そのジョブは再開されます。 * ``stop`` ``stop`` 関数は実行しているジョブを中断します。 * ``wait`` ``wait`` 関数は実行しているジョブが終了するまで待機します。この関数は、中断しているジョブを待機することができません。 ジョブをフォアグラウンドに持っていくことはしません。また、 ``wait`` が割り込まれた場合、ジョブはバックグラウンド上で実行し続けます。 * ``kill`` ``kill`` 関数はジョブにシグナルを送ります。 :: kill [signal] . シグナルは数値かシンボリックのどちらでも構いません。シンボリックシグナルは以下のように命名されています。 ABRT, ALRM, HUP, ILL, KILL, QUIT, SEGV, TERM, USR1, USR2, CHLD, STOP, TSTP, TTIN, TTOU, VTALRM, PROF * ``exit`` ``exit`` 関数は現在のセッションを終了します。 * ``which`` , ``where`` 相当する関数のドキュメントを参照します。 * ``rehash`` 検索パスをリセットします。 * ``ln-or-cp`` *src dst* *src* を *dst* にリンクもしくはコピーします。 *dst* は上書きされます。通常、 ``ln-or-cp`` は初めに出力先のファイルを(存在している場合は)消去します。次にこの関数は入力先のファイルを指し示しているシンボリックリンクを出力先に生成します(パスはできる限り相対パスとして設定されます)。シンボリックリンクが生成できない場合(例. OSやファイルシステムがシンボリックリンクをサポートしていない場合)、この関数はハードリンクを生成しようと試みます。もしこの試みも失敗したのなら、強制的に入力先のファイルを出力先にコピーしようとするでしょう。 * ``history`` 現在のコマンドライン履歴を表示します。 * ``digest`` 与えられたファイルの要約を出力します。 * Win32 関数群 Win32ではスクリプトのために使える、多くのプログラム(DOS ``cmd.exe`` に含まれている関数を除く)を提供しています。以下の関数はWin32で定義されており、Win32上でしか使えません。他のシステム上では、この関数はすでに存在している他のプログラムに置き換わることになるでしょう。 * ``grep`` :: grep [-q] [-n] pattern files... ``grep`` 関数はomakeの ``grep`` 関数を呼び出します。 * omake内部の標準システムコマンド 通常、以下のコマンドはomakeが内部に保有している関数を使います: ``cp`` , ``mv`` , ``cat`` , ``rm`` , ``mkdir`` , ``chmod`` , ``test`` , ``find`` 。もしあなたがどうしてもこれらのコマンドを、システムが標準で使っているコマンドで呼び出したいのなら、 ``USE_SYSTEM_COMMANDS`` を ``OMakeroot`` ファイルの先頭に設定してください。 * ``pwd`` :: pwd ``pwd`` エイリアスはカレントディレクトリの絶対パスを表示します。 * ``mkdir`` :: mkdir [-m ] [-p] files ``mkdir`` 関数はディレクトリを生成します。-verb+-m+ オプションには生成されるディレクトリのパーミッションを指定します。 ``-p`` オプションが指定された場合、存在しない親ディレクトリもまとめて生成します。 * ``cp`` * ``mv`` :: cp [-f] [-i] [-v] src dst cp [-f] [-i] [-v] files dst mv [-f] [-i] [-v] src dst mv [-f] [-i] [-v] files dst ``cp`` 関数は ``src`` ファイルを ``dst`` ファイルにコピーします。出力先のファイルが存在している場合は上書きします。一つ以上の入力ファイルが指定された場合、最後のファイルはディレクトリでなければならず、入力ファイルはそのディレクトリの内部にコピーされます。 * **-f** 確認せずに、強制的にファイルをコピーします。 * **-i** 出力先のファイルを消去する前に確認します。 * **-v** 実際になにが行われているのか表示します。 * ``rm`` :: rm [-f] [-i] [-v] [-r] files rmdir [-f] [-i] [-v] [-r] dirs ``rm`` 関数はファイルの集合を消去します。ファイルが存在しなかった場合、もしくはファイルが消去できなかった場合、なんの警告も表示しません。 オプション: * **-f** 確認せずに、強制的にファイルを消去します。 * **-i** ファイルを消去する前に確認します。 * **-v** 実際になにが行われているのか表示します。 * **-r** 再帰的にディレクトリの内容を消去します。 * ``chmod`` :: chmod [-r] [-v] [-f] mode files ``chmod`` 関数はファイルの集合やディレクトリのパーミッションを変更します。この関数はWin32上ではなにも行いません。 ``mode`` には8進数か、シンボリックフォーム ``[ugoa]*[-=][rwxXstugo]+`` を指定します。詳細は ``chmod`` のmanを参照してください。 オプション: * **-r** ディレクトリ内のすべてのファイルのパーミッションを再帰的に変更します。 * **-v** 実際になにが行われているのか表示します。 * **-f** エラーが生じても実行し続けます。 * ``cat`` :: cat files... ``cat`` 関数はファイルの内容をstdoutに出力します。 * ``test`` :: test expression [ expression +]+ [ --help [ --version 詳細は ``test`` 関数のドキュメントを参照してください。 * ``find`` :: find expression 詳細は ``find`` 関数のドキュメントを参照してください。