公開技術情報

[English] [Japanese]

04.3 タプル編

ここでは、 値の組み合わせであるタプルの扱いついて説明します。

タプルは v1.5.3 から利用可能です。

タプルのコンストラクタ

タプルは次のように書くことでオブジェクトを生成します。

// @lnsFront: ok
let obj = (= 1, "abc" ); // 1 "abc"

これは、1, "abc" の値の組み合わせを保持するタプルです。

タプルは (= ) で値を括ります。

必ず 1 つ以上のデータを指定する必要があります

タプルの型宣言

上記処理は型推論により型宣言を省略していますが、 省略しない場合は次のように書きます。

// @lnsFront: ok
let obj:(int,str) = (= 1, "abc" ); // 1 "abc"

(int,str) は、要素が int と str であるタプルの型を宣言します。

タプル型の各要素の名称

タプル型の宣言時に、次のように各要素の型にシンボルを付けることが可能です。

// @lnsFront: skip
fn func(): (id:int, mess:str);
  • シンボルが id で、型が int。
  • シンボルが mess で、型が str。

ただ、上記はあくまでも人がその型が何なのか理解するのを補助するためのもので、 処理上は次のように省略したときと何も違いはありません。

// @lnsFront: skip
fn func(): (int,str);

タプルの値の展開

タプル型に格納されている値を展開するには ... 演算子を使用します。

  // @lnsFront: ok
  fn func(): (int,str) {
     return (= 1, "abc" );
  }

  let val1,val2 = func()...; // 1 "abc"
  print( val1 + 10, val2 .. "xyz" ); // 11 abcxyz

タプル型の値の後に ... を指定することで、タプルが展開されます。

なお、次のような方法でタプルの各要素を参照することはできません。

// @lnsFront: error
let val = (= 1, "abc" ); // 1 "abc"
print( val[1] ); // error

以上。