(Something a bit more basic than the other thread about the array shfit
bug!)
Given the following:
myArray=[“a”, “b”, “c”, “d”]
until myArray.empty?
myArray.shift { |letter|
puts letter
}
end
… I would expect the letters a, b, c and d to be printed to the
screen, but I don’t get anything (including no error message). Have I
misunderstood something about array shift and/or blocks?
… I would expect the letters a, b, c and d to be printed to the
screen, but I don’t get anything (including no error message). Have I
misunderstood something about array shift and/or blocks?
shift doesn’t take a block. You can write one but shift won’t call
it.
Many thanks David. I’m not sure I understand why shift doesn’t take a
block, but thanks for confirming it.
I expect it’s because shifting is a (conceptually) atomic operation.
If you need to examine what got shifted, you can get the return value.
If you need to examine the newly-shortened array, you can examine it
directly. There’s really nothing for a block to do.
Consider, by way of contrast, something like String#sub, where you
find something and replace it with something – and you might want to
have a handle on the ‘something’, in the middle, so that you can
manipulate it to generate the eventual replacement string.
David
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.