Open taiseiue opened 2 months ago
@rokuosan , @SotaTne
範囲指定構文どっちがいいじゃろ
// Pythonスタイル
source[i:j];
source[i:^j];
// スプレッド構文と混ぜたスタイル
source[i...j];
source[i...^j];
Pythonと同じ区間指定の方がおさまりが良さそう。
後者の方なら、until中置関数が欲しくなりがち。
ref: https://kotlinlang.org/docs/ranges.html ref: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.ranges/until.html
Pythonと同じ区間指定の方がおさまりが良さそう。
後者の方なら、until中置関数が欲しくなりがち。
ref: https://kotlinlang.org/docs/ranges.html ref: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.ranges/until.html
ちょっと嘘。
source[n:m];
が半開$[n,m)
$なら[n:m]
で良いと思ってる。
後者の方なら、until中置関数が欲しくなりがち。
これは僕が勝手にスプレッド構文が閉区間$[n.m]
$だと思っていたので、半開区間$[n,m)
$を表現したいときに[n until m]
のように表現できると嬉しいなぁという意図を伝えたかった。
なんとなくRubyとPerlの例を挙げておく。
これnumber : number
で:
を両側に数値をつける二項演算子にできひんかな
Rangeを返す演算子ということかいな
そうわよ
これ考えたらオペランドを省略できてしまうから普通の演算子と同じ扱いにはでけへんかぁ
ひらめきひらめき
3つ演算子を追加するじゃろ(名前は後で考えるとして)
start:end
の両方を指定):end
のみ指定)start:
のみ指定)この三つでそれぞれRangeStruct
を返すように実装したらええんや
配列の範囲構文
概要
次の例のように、配列の特定範囲を抜き出してシャローコピーを作成する構文を導入したい。
動機
配列の特定範囲を切り出す操作を簡単に記述できるようにするため。
詳細設計
以下のような構文を見たら、
array.Slice
メソッドの呼び出しに展開する。このとき、
start
とend
はどちらもnumber
型(正負を含む)。 ただし、展開時には型検査は行わない。以下の理由から、スライス構文は右に半開として扱う。
[i : i]
と書いてもエラーにならない(単に長さ0の配列になる)end - start
で長さが求まるSubString
と挙動が同じつまり、以下のような挙動になる。
該当ドキュメント
欠点
前例
未確定の設計
アーカイブ
範囲指定構文は次のどれにすべき?