長さ#

配列的オブジェクトには長さの概念が定義されます。

長さの定義#

長さの定義は値のタイプによって異なります。

タイプ 長さの定義
文字列 UTF-16コード単位の個数
配列 要素数
オブジェクト 親オブジェクトを無視したエントリの数
BLOB バイト数
ストリーム 各要素の長さの合計

長さは何らかの数値として定義されますが、整数であるとは限りません。

長さ取得演算子 $#array#

長さ取得演算子 $#array は値の長さを取得します。

$ xa '$#"123"'
# 3

$ xa '$#[1, 2, 3]'
# 3

$ xa '$#{a: 1; b: 2; c: 3}'
# 3

$ xa '$#BLOB.of([1, 2, 3])'
# 3

$ xa '$#("abc", "def", "ghi")'
# 9

長さ取得演算子のオーバーライド#

長さの取得は値の $#_ メソッドを呼び出すことで行われます。

$#_ メソッドをオーバーライドすることで長さの取得の処理を変更することができます。

$ xa '
  Object := {
    `$#_`: this -> this.length
  }
  object := Object{length: 123}
  $#object
'
# 123

長さは小数値であってもかまいません。

$ xa '
  Line := {
    `$#_`: this -> ((this.b.0 - this.a.0) ^ 2 + (this.b.1 - this.a.1) ^ 2) ^ 0.5
  }
  object := Line{
    a: [1, 2]
    b: [2, 3]
  }
  "$%.4f($#object)"
'
# 1.4142