🐷
[Feature #21284] 任意の値を埋めた状態でサイズを変更できるメソッドを追加する提案
[Feature #21284] Request: add Array#pad method
-
Array#fillでは任意の範囲を任意の要素で置き換えることができる
ary = [1, 2, 3]
# 0〜2 の範囲を "homu" に置き換える
ary.fill("homu", 0..2)
pp ary # => ["homu", "homu", "homu"]
- このときに範囲外を指定するとそのサイズまで含めて置き換えがされる
ary = [1, 2, 3]
# 0〜4 の範囲を "homu" に置き換える
ary.fill("mami", 0..4)
pp ary # => ["mami", "mami", "mami", "mami", "mami"]
- この亜種として『指定されたサイズになるように配列の長さが調整され、はみ出た部分は任意の要素に置き換える』という
Array#padメソッドを追加する提案
class Array
# 内部的にはこういう挙動を想定
def pad(pad_to_length, object = nil)
fill(object, size, pad_to_length - size)
end
end
ary = [1, 2, 3]
# サイズが 5 になるように調整される
# はみ出た部分は "homu" で置き換えられる
ary.pad(5, "homu")
pp ary # => [1, 2, 3, "homu", "homu"]
# ary のサイズを超えなければ何もしない
ary.pad(3, "mami")
pp ary # => [1, 2, 3, "homu", "homu"]
- 要は『追加される要素だけ任意の値で埋めておきたい』みたいな挙動ですね
- これ系はパッとユースケースは思いつかないんですが過去にこういうのほしかったケースはあった気がするんですよね〜〜〜〜
ary = [1, 2, 3]
ary.fill(nil, ary.size..10)
pp ary
- Ruby の機能にはないんですが『先端を排他する構文があれば以下のようにかける』というコメントが来てますね
# ^.. が先頭を排他する構文想定
# -1 が size-1 相当なのでそれは含まずに 10個分 nil で埋める、みたいな意味
ary.fill(nil, -1^..10)
-
^..は Ruby の構文にはないんですが Perl6 にある『ねこ演算子』と呼ばれる演算子らしい- 終端を除く場合は
^..^にもかけるみたい - かわいい
- ネコ演算子 (ねこみみ演算子) とは | tech - 氾濫原
- 終端を除く場合は
- Ruby にも先端を除く Range の表現がほしいわね…
Discussion