"Ruby" (外部評価システム)

詳細

ExternalEvaluateの使用法

  • ExternalEvaluate["Ruby",code] はRuby REPLでコード列を実行し,Wolfram言語式として結果を返す.
  • ExternalEvaluate["Ruby""String",code] はRuby REPLでコード列を実行し,Wolfram言語式として結果を返す.
  • ExternalEvaluate["Ruby""type",code]"type"として可能な設定:
  • "Expression"Wolfram言語式に変換しようと試みる
    "String"外部評価子によって出力された生の文字列を与える
    "ExternalObject"結果をExternalObjectとして返す

データ型

  • Rubyに組み込まれた次の型がサポートされている:
  • ArrayList値の配列
    BigDecimalReal任意制度の実数
    BignumInteger任意サイズの整数
    booleanTrue|Falseブール地
    ComplexComplex複素数
    FixnumInteger機械サイズの数
    FloatReal実数値の数
    HashAssociation連想の配列
    nilNullヌル値
    RationalRational有理数
    StringString文字の値の列

使用法

  • 列のテンプレート(<**>)は,Wolfram言語の式を評価したりRubyコード列に挿入したりするのに使うことができる.

サポートされる外部操作

  • ExternalOperation["Eval","code"]"code"の外部評価を表す.
  • ExternalOperation["Eval","code",assoc]はパラメータが assoc で与えられた"code"の外部評価を表す.
  • ExternalOperation["Call",func,arg1,arg2,]は与えられた引数が arg1, arg2, の関数func を呼び出す.
  • ExternalOperation["GetAttribute",obj,"attr"]obj の属性"attr"を得る.
  • ExternalOperation["SetAttribute",obj,"attr",val]obj の属性"attr"を与えられた値 val に設定する.
  • ExternalOperation["Cast",obj,"type"]obj を指定された"type"に変換する.

例題

すべて開くすべて閉じる

  (3)

Rubyで2+2を評価して結果を返す:

配列はリストとして返される:

>とタイプしてドロップダウンメニューからRubyを選ぶと,評価にExternalEvaluateを使うコードのセルが得られる:

[1,2,3,4].map { |n| n * 2 }

スコープ  (28)

Rubyセッションを開始する:

Rubyで文字列を連結すると,結果が返される:

Rubyのハッシュは連想として返される:

セッションを終了する:

セッションオプション  (9)

"ReturnType"  (3)

Ruby評価システムでは,デフォルトの戻り型は"Expression"である:

"Expression"戻り型では,数,文字列,リスト,連想は自動的にインポートされる:

"String"戻り型は,Rubyメソッドの to_s を呼び出すことによって結果の列を返す:

"Version"  (1)

"Version"を使うと,特定のバージョンのRubyだけを確実に使うことができる:

マイナーバージョンやパッチバージョンを指定することができる:

"Evaluator"  (1)

指定された"Evaluator"を使ってRubyコードを評価する:

"SessionProlog"  (1)

"SessionProlog"を使って,セッションの最初に副作用を実行する:

"SessionEpilog"  (1)

"SessionEpilog"を使って,セッションの最後に副作用を実行する:

"Prolog"  (1)

"Prolog"を使って,それぞれの評価の前に副作用を実行する:

"Epilog"  (1)

"Epilog"を使ってそれぞれの評価の後に副作用を実行する:

コマンドオプション  (10)

"Command"  (3)

Rubyコードの列が与えられたときだけ,コマンドは直接実行される:

上記は次の形式を使ったコマンドに等しい:

Fileラッパーを使ってファイルのコードを実行する:

上記は次の形式を使ったコマンドに等しい:

CloudObjectにコードを置く:

クラウドから直接評価する:

上記は次の形式を使ったコマンドに等しい:

"ReturnType"  (1)

デフォルトでは,コマンドはセッションの生成中に指定される"ReturnType"を使って実行される:

コマンドで"ReturnType"を指定すると,セッションの"ReturnType"が上書きされる:

"Arguments"  (2)

"Arguments"を使って,引数付きのRuby関数を呼び出す:

リスト以外の引数が与えられると,関数には単独の引数が渡される:

第一引数としてリストを渡す必要がある場合は,追加のリストで明示的にそれをラップしなければならない:

"Command"内で関数を定義し,"Arguments"で直接それを呼び出すことができる:

Ruleを使っても同じ結果を得ることができる:

ExternalFunctionを生成することによって引数を渡すこともできる:

"Constants"  (1)

"Constants"を使って,コマンドを実行する前に永続的な大域的変数を設定する:

"TemplateArguments"  (3)

コマンドを実行するとき,TemplateExpressionを行内に埋め込むことができる:

"TemplateArguments"を使うと明示的にTemplateSlotを埋めることができる:

リスト以外の引数が与えられると,テンプレートには単独のテンプレート引数が渡される:

第一引数としてリストを渡す必要がある場合,それを明示的に追加のリストでラップしなければならない:

テンプレートスロットに名前を付け,Associationを使うと,テンプレートに名前付きの引数を渡すことができる:

外部操作  (8)

"Eval"  (1)

Rubyにおける任意のコード評価を表すExternalOperationを実行する:

第2引数を使って評価のコンテキストを渡す:

"Call"  (3)

Rubyで関数を作成するExternalOperationを定義する::

ExternalOperation "Call"を実行して関数を呼び出す:

ExternalEvaluateを使って操作を実行する:

"Call"操作のいずれの引数もExternalOperationにすることができる:

以下のようにして,引数を直接ExternalEvaluateに渡すこともできる:

結果は,以下のRubyコードを実行したときと同じになる:

Ruby関数のExternalFunctionを作成する:

"Call"操作を実行することで関数を呼び出す:

以下のようにしても同じ結果が得られる:

Ruby関数のExternalObjectを作成する::

"Call"操作を実行することで関数を呼び出す:

以下のようにしても同じ結果が得られる:

ExternalObjectサブ値を使うこともできる:

セッションを削除する:

"GetAttribute"  (2)

日付を扱うRubyセッションを開始する:

Dateオブジェクトに対するExternalObjectを返す:

"GetAttribute"を使って年の属性を抽出する:

以下のRubyコードを実行しても同じ結果が得られる:

セッションを削除する:

日付を表すExternalObjectを作成する:

ExternalOperationを使って現在の年を得る:

ほとんどの評価子では"GetAttribute"がデフォルト操作であり,ExternalOperationは省略できる:

セッションを削除する:

"SetAttribute"  (1)

日付を扱うRubyセッションを開始する:

日付でオブジェクトを作成する:

年を2024に設定する:

年が2024に設定されたことをチェックする:

結果は以下のRubyコードを実行したときと同じである:

セッションを削除する:

"Cast"  (1)

現在の日付を表すExternalObjectを作成する:

"Expression"を使ってオブジェクトをWolfram言語式として返す:

Cast操作もExternalObjectサブ値で実行することができる:

シンボルExpressionは同じことについてのショートカットである:

オブジェクトを文字列として返す:

シンボルStringは同じ操作の近道である:

オブジェクトをExternalObjectとして返す:

シンボルExternalObjectは同じ操作の近道である:

ExternalEvaluate"ReturnType"を使っても同じことができる:

セッションを削除する:

アプリケーション  (1)

カスタムのRuby関数を呼び出すWolfram言語関数を定義する:

セッションを終了する: