Refactor Indexable::Mutable#fill
's overloads
#11368
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR reworks
Indexable::Mutable#fill
's overloads so that they follow the convention of other subrange-accepting methods in the Crystal standard library.Indexable::Mutable(T)
:#fill(value : T, start : Int, count : Int)
#fill(value : T, range : Range)
#fill(start : Int, count : Int, & : Int32 -> T)
#fill(range : Range, & : Int32 -> T)
Array(T)#fill(value : T, start : Int)
andArray(T)#fill(start : Int, & : Int32 -> T)
are now deprecated. They are redundant because theRange
overloads take care of them with astart..
argument; no other method in the standard library has such an overload on top ofstart + count
andrange
ones.start == size
orstart + count > size
no longer raise an exception.#fill
will now replace fewer thancount
elements in that case (possibly zero). This is also the behaviour in Ruby.Array
andStaticArray
delegate to their underlyingSlice
s to take advantage of thememset
optimization. This includes also the subrange-accepting overloads.