Use of array shift and blocks

(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?

Hi –

On Mon, 25 Sep 2006, Toby R. wrote:

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?

shift doesn’t take a block. You can write one but shift won’t call
it.

You could do this:

until array.empty?
puts array.shift
end

David

On 2006-09-24, Toby R. [email protected] wrote:

Given the following:
myArray=[“a”, “b”, “c”, “d”]
until myArray.empty?
myArray.shift { |letter|
puts letter
}
end

change the code to:
myArray=[“a”, “b”, “c”, “d”]
until myArray.empty?
letter = myArray.shift
puts letter
end

depesz

unknown wrote:


shift doesn’t take a block. You can write one but shift won’t call
it.

You could do this:

until array.empty?
puts array.shift
end

David

Many thanks David. I’m not sure I understand why shift doesn’t take a
block, but thanks for confirming it.

regards
Toby

Hi –

On Mon, 25 Sep 2006, Toby R. wrote:

David

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.

| Privacy Policy | Terms of Service | Remote Ruby Jobs