6.23. kink/STR

6.23.1. str型

str は有限長の不変なUnicodeコードポイントの文字列である。

Unicodeコードポイントについては右記を参照: https://www.unicode.org/versions/Unicode17.0.0/core-spec/chapter-3/#G22700

サロゲートコードポイント

strは対にならないサロゲートコードポイントを含むことができる。

上位サロゲートコードポイントに下位サロゲートコードポイントが後続した場合、UTF-16にしたがって単一のコードポイントに統合される。

6.23.1.1. Str.codepoints

codepoints は Str のコードポイントを含む vec を戻す。

例

6.23.1.2. Str.size

sizeはStrのコードポイントの数を整数のnumとして戻す。

6.23.1.3. Str.any?

any?はStrが1個以上のコードポイントを含んでいるかどうかを戻す。

6.23.1.4. Str.get(Codepoint_ind)

getはCodepoint_indの位置のコードポイントを戻す。

結果はコードポイントを表す整数のnumだ。

事前条件

Codepoint_indは、 [0, Str.size - 1] の範囲に含まれる整数のnumでなければならない。

例

6.23.1.5. Str.slice(From To)

sliceは、Strのスライスを作ってstr値として戻す。

スライスは、[From, To)の範囲のコードポイントからなる。結果のstrは、(To - From)個のコードポイントを持つ。

事前条件

FromとToは整数のnum値でなければならない。

0 <= From <= To <= Str.size

例

6.23.1.6. Str.take_front(N)

take_frontはStrの最初のN個のコードポイントを含むstrを戻す。

事前条件

Nは[0, Str.size]の範囲に含まれる整数のnumでなければならない。

例

6.23.1.7. Str.take_back(N)

take_backはStrの最後のN個のコードポイントを含むstrを戻す。

事前条件

Nは[0, Str.size]の範囲に含まれる整数のnumでなければならない。

例

6.23.1.8. Str.drop_front(N)

drop_frontはStrから最初のN個のコードポイントを除いたstrを戻す。

事前条件

Nは[0, Str.size]の範囲に含まれる整数のnumでなければならない。

例

6.23.1.9. Str.drop_back(N)

drop_backはStrの最後のN個のコードポイントを除いたstrを戻す。

事前条件

Nは[0, Str.size]の範囲に含まれる整数のnumでなければならない。

例

6.23.1.10. Str.search_slice(Slice Min_pos ...[$config={}])

search_sliceはStrの中でスライスを探す。探索をコードポイントの添字Min_posから始めて、見つかったスライスが始まるコードポイントの添字であるPosを出力する。

コンフィグメソッド:

• C.on_success($success): default = VAL.identity.

• C.on_error($error): default = 例外を投げる関数

search_sliceは、 Pos >= Min_pos と Str.slice(Pos Slice.size) == Slice を満たす最も小さいPosを探す。もしそのようなPosが見つかれば、search_sliceは$successを、Posを引数として末尾呼び出しする。もし見つからなければ、search_sliceは$errorを引数なしで末尾呼び出しする。

事前条件

Slice は str 型でなければならない。

Min_posは [0, Str.size] の範囲の整数のnumでなければならない。

$successは整数のnumを取る関数でなければならない。

$errorはサンクでなければならない。

例

例

6.23.1.11. Str.have_prefix?(Prefix)

have_prefix?はStrの先頭がPrefixかどうかを戻す。

Str.take_front(Prefix.size) がPrefixに等しいとき、have_prefix?はtrueを戻す。そうでなければ、have_prefix?はfalseを戻す。

事前条件

Prefix は str 型でなければならない。

6.23.1.12. Str.have_suffix?(Suffix)

have_suffix?はStrの末尾がSuffixかどうかを戻す。

Str.take_back(Suffix.size) がSuffixに等しいとき、have_suffix?はtrueを戻す。そうでなければ、have_suffix?はfalseを戻す。

事前条件

Suffix は str 型でなければならない。

6.23.1.13. Str.have_slice?(Slice)

have_slice?はStrがSliceをスライスとして持っているかどうかを戻す。

もし Str.slice(Ind Ind + Slice.size) がSliceと等しいようなIndがあれば、have_slice?はtrueを戻す。なければ、have_slice?はfalseを戻す。

事前条件

Slice は str 型でなければならない。

6.23.1.14. Str.trim

trimはStrの先頭と末尾から空白類の文字を取り除いたスライスを戻す。

trimはStrのスライスのうち、空白類の文字で始まらず、空白類の文字で終わらない最長のスライスを戻す。

空白類の文字は、[U+0000, U+0020]の範囲内のコードポイント、あるいはU+007fである。

例

6.23.1.15. Str.trim_front

trim_frontはStrの先頭から空白類の文字を取り除いたスライスを戻す。

trim_frontはStrのスライスのうち、空白類の文字で始まらない最長のスライスを戻す。

空白類の文字の定義は trim を見よ。

例

6.23.1.16. Str.trim_back

trim_backはStrの末尾から空白類の文字を取り除いたスライスを戻す。

trim_backはStrのスライスのうち、空白類の文字で終わらない最長のスライスを戻す。

空白類の文字の定義は trim を見よ。

例

6.23.1.17. Str.ascii_upcase

ascii_upcaseは、Str中のASCII小文字のコードポイント(U+0061='a' から U+007A='z')を、対応するASCII大文字(U+0041='A' から U+005A='Z')に変換する。

ascii_upcaseは、ASCII小文字以外のコードポイントを変換しない。

例

6.23.1.18. Str.ascii_downcase

ascii_downcaseは、Str中のASCII大文字のコードポイント(U+0041='A' から U+005A='Z')を、対応するASCII小文字(U+0061='a' から U+007A='z')に変換する。

ascii_downcaseはASCII大文字以外のコードポイントを変換しない。

例

6.23.1.19. Str.well_formed?

well_formed?は、Strのすべてのコードポイントがunicode scalar value であるかどうかを戻す。

言い換えると、well_formed?は、対にならないサロゲートコードポイントをStrが含まないことを検証する。

6.23.1.20. Str.format(... Args) / Str.format($config)

formatは、Strをテンプレートとしてstrを生成する。

format にはふたつのオーバーロードがある。

オーバーロード: Str.format(... Args)

可変長の引数Argsが渡されたとき、formatはArgsの各要素を位置引数として使う。

事前条件:

• Strは下記の文法を満たすstrでなければならない。

• Argsの各要素はshowメソッドを持っていなければならない。

オーバーロード: Str.format($config)

$configが渡されたとき、formatは$configをコンフィグ関数として使う。

事前条件:

• Strは下記の文法を満たすstrでなければならない。

• $configはformat_configを引数として取る関数でなければならない。

テンプレート文字列の書式

テンプレート文字列には、波括弧 "{" と "}" で区切られたプレースホルダを含められる。formatはプレースホルダに対応する引数について、 .show(...[$config]) メソッドを呼び、その結果の文字列をプレースホルダの場所に埋め込む。

プレースホルダには次の変種がある。

• "{}": 位置引数を取り、空文字列 "" を指示子とする。

• "{%xxx}": 位置引数を取り、 "xxx" を指示子とする。

• "{Foo}": "Foo" という名前の名前引数を取り、空文字列 "" を指示子とする。

• "{Foo%xxx}": "Foo" という名前の名前引数を取り、 "xxx" を指示子とする。

名前には "{", "}", "%" が含められない。

指示子はShow_config.spec(Spec)メソッドに渡される。指示子には "{", "}" が含められない。

テンプレート文字列に "{" と "}" を含めたい場合、 "{{", "}}" としてエスケープする。

例

ロケールを指定:

名前引数を使う:

6.23.1.21. Str1 + Str2

+ 演算子、つまりop_addメソッドは、Str1のコードポイント列を前に、Str2のコードポイント列を後ろに配した文字列を戻す。

事前条件

Str2 は str 型でなければならない

例

6.23.1.22. Str * N

* 演算子、つまりop_mulメソッドは、StrをN回繰り返した文字列を戻す。

事前条件

Nは非負整数のnumでなければならない。

例

6.23.1.23. Str1 == Str2

== 演算子、つまりop_eqメソッドは、ふたつの文字列が同じコードポイントの列から成っているかどうかを戻す。

事前条件

Str1とStr2はstr型でなければならない。

例

6.23.1.24. Str1 <= Str2

<= 演算子、つまりop_leメソッドは、ふたつの文字列のコードポイントを辞書順で比較し、Str1がStr2以下かどうかを戻す。比較はUnicodeのコードポイントの大小関係に従って、先頭から末尾にかけて行われる。

比較の結果は java.lang.String.compareTo と異なり得ることに注意しよう。これは、String.compareToが文字列の比較を16ビットのコードユニットを元に行うためだ。

事前条件

Str2はstr型でなければならない。

例

6.23.1.25. Str.show(...[$config={}])

showはStr自体を戻す。

showは省略可能なパラメータ$configを取れるが、これが呼ばれることはない。

.showメソッドの一般的な契約については、この記事中の *.show(...[$config]) を見よ。

例

6.23.1.26. Str.repr

reprはStrのデバッグ用の文字列表現を戻す。

例

6.23.2. format_config型

format_configはStr.formatのコンフィグ値である。

6.23.2.1. Format_config.arg(Pos_arg)

argメソッドは位置引数を追加する。

argメソッドの呼び出し回数は、名前のないプレースホルダの数と同じでなければならない。

事前条件

Pos_argは .show(...[$config]) メソッドを提供しなければならない。

6.23.2.2. Format_config.named_arg(Name Arg)

named_argメソッドは名前引数を追加する。

テンプレート文字列中で参照されない Name を渡しても構わない。

事前条件

Name は空でない str である必要がある。また、正規表現 [a-zA-Z_][a-zA-Z0-9_?]* に受け入れられる必要がある。

Arg は .show(...[$config]) メソッドを提供しなければならない。

Name1, Name2, ,,, の集合は、テンプレート中の名前引数の名前の集合の上位集合でなければならない。

例

6.23.2.3. Format_config.locale(Locale)

localeメソッドはロケールを指定する。Localeは各プレースホルダのshowメソッドに渡される。

事前条件

Locale は locale 型でなければならない。

6.23.3. *.show(...[$config={}]) メソッド

この節では、任意の型のshowメソッドについて一般的な契約を述べる。

showメソッドには、レシーバを表現する文字列を戻すことが期待される。reprメソッドがデバッグメッセージに使われるのに対して、showメソッドはUIメッセージに使われる。

通常、showメソッドはStr.formatから呼ばれる。

コンフィグメソッド

• C.locale(Locale): default = Locale.root

• C.spec(Spec): default = ''

Localeはlocale型でなければならない。showメソッドはロケールを用いて結果をローカライズできる。

Specはstr型でなければならない。showメソッドはこの指示子を用いて結果を調整できる。指示子の文法はshowメソッドの実装に依存するが、少なくともshowメソッドは空文字列 '' を指示子として受け取れなければならない。

例

showメソッドは上記以外のコンフィグメソッドも提供できる。たとえば、Num.showはradixとpad_zeroというコンフィグメソッドを提供する:

6.23.4. STR.is?(Val)

is?はValがstrであるかどうかを戻す。

6.23.5. STR.of(...Codepoints)

ofは引数で指定されたコードポイントを含むstrを戻す。

事前条件

すべての引数は [0x000000, 0x10ffff] の範囲の整数でなければならない。

例

6.23.6. STR.from_each(Codepoints)

from_eachは指定されたコードポイントを含むstrを戻す。

事前条件

Codepoints は each メソッドを提供する列でなければならない。たとえば vec や iter など。

Codepoints の要素は [0x000000, 0x10ffff] の範囲の整数でなければならない。

例

例

6.23.7. STR.default_newline

default_newlineはランタイムのデフォルトの行区切りを戻す。

結果は str で、 "\r\n" か "\n" のどちらかである。