What is the difference between two block?

Dear friends,
What is the difference between do … end block and { … }.
Is there any big difference.while doign the program more than one do and
also we can have inside one do … end.
like this
do
puts hai
do
puts
end
end
And aslo ,same as the { … ; {…} }
I wan to know the difference,I feel soething is there,but i am not able
to findout the answers for this.
Anybody help me please.

by
vellingiri.

Arul hari wrote:

What is the difference between do … end block and { … }.

Precedence. Other than that there is no difference, but it’s convention
to use
{} for single-line blocks and do end for multi-line blocks.

HTH,
Sebastian

Sebastian H. wrote:

Arul hari wrote:

What is the difference between do … end block and { … }.

Precedence. Other than that there is no difference, but it’s convention
to use
{} for single-line blocks and do end for multi-line blocks.

HTH,
Sebastian

Dear friend,
How do you say single line blocks and multi-line blocks.
We can use both the methods are multi-line blocks.
could you say some example.
I can’t understand what you are saying?

by
vellingiri.

Arul hari wrote:

Sebastian H. wrote:

it’s convention to use
{} for single-line blocks and do end for multi-line blocks.

 How do you say single line blocks and multi-line blocks.

Ehrm, I open my mouth and the words come out? I don’t quite understand
your question.

We can use both the methods are multi-line blocks.

You can use {} as well as do end for multi-line blocks, yes (I’m
assuming
that’s what you meant to convey with the above sentence, although
honstly I
had some trouble parsing that). But it’s convention to use do end for
multi-line blocks. It’s only convention, it’s not enforced by ruby. As I
said: the only real difference is precedence.

could you say some example.

10.times {|i|
bar=something(i)
foo=bar.some_thing_else
puts foo
} # Discouraged

10.times do |i|
bar=something(i)
foo=bar.some_thing_else
puts foo
end # Encouraged

HTH,
Sebastian

Sebastian H. wrote:

Arul hari wrote:

Sebastian H. wrote:

it’s convention to use
{} for single-line blocks and do end for multi-line blocks.

 How do you say single line blocks and multi-line blocks.

Ehrm, I open my mouth and the words come out? I don’t quite understand
your question.

We can use both the methods are multi-line blocks.

You can use {} as well as do end for multi-line blocks, yes (I’m
assuming
that’s what you meant to convey with the above sentence, although
honstly I
had some trouble parsing that). But it’s convention to use do end for
multi-line blocks. It’s only convention, it’s not enforced by ruby. As I
said: the only real difference is precedence.

could you say some example.

10.times {|i|
bar=something(i)
foo=bar.some_thing_else
puts foo
} # Discouraged

10.times do |i|
bar=something(i)
foo=bar.some_thing_else
puts foo
end # Encouraged

HTH,
Sebastian

Dear friends,

 Thanks all of guys especially for sebastian for his deep 

explanation.

by
vellingiri.

From: Arul hari [mailto:[email protected]]

I wan to know the difference,I feel soething is there,but i

am not able to findout the answers for this.

there is difference, but not much

def f a,b
yield a,b
end

precedence issue:

f 1,2 {|x,y| p x,y}
SyntaxError: compile error
(irb):33: syntax error, unexpected ‘{’, expecting $end
f 1,2 {|x,y| p x,y}
^

f 1,2 do|x,y| p x,y end
1
2

as always, it is safe by enclosing parameters w parens

irb(main):035:0> f(1,2) {|x,y| p x,y}
1
2

irb(main):036:0> f(1,2) do|x,y| p x,y end
1
2

also, one-liner chain fans sees do-end as noisy and sensitive to spacing
(since do-ends are keywords)

irb(main):037:0> [1,2,3].map{|x| 2x}.map{|x|x+1}
=> [3, 5, 7]
irb(main):038:0> [1,2,3].map do|x| 2
x end.map do |x|x+1 end
=> [3, 5, 7]
irb(main):039:0> [1,2,3].mapdo|x| 2x end.map do |x|x+1 end
SyntaxError: compile error
(irb):39: syntax error, unexpected kEND, expecting $end
[1,2,3].mapdo|x| 2
x end.map do |x|x+1 end
^

nonetheless, i like both. i particularly like do-end since i like typing
fast without using shift. but if you have editors like textmate or
similar, no need :slight_smile:

kind regards -botp

On 10/30/07, Sebastian H. [email protected] wrote:

Arul hari wrote:

What is the difference between do … end block and { … }.

Precedence. Other than that there is no difference, but it’s convention to use
{} for single-line blocks and do end for multi-line blocks.

I fail to see that convention often personally I try to adhere to a
different convention I have seen recently:

I use {} if the value of the block is used and do end when it is all
about side effects,

example:

[ … ].map{|x| x.to_s}

note that under that convention map do end disappears almost

vs.

[ … ].each do | x |
puts x
end # yes I know that puts [ … ] does the same ,)

HTH
Robert

Peña, Botp wrote:

From: Arul hari [mailto:[email protected]]

I wan to know the difference,I feel soething is there,but i

am not able to findout the answers for this.

there is difference, but not much

def f a,b
yield a,b
end

precedence issue:

f 1,2 {|x,y| p x,y}
SyntaxError: compile error
(irb):33: syntax error, unexpected ‘{’, expecting $end
f 1,2 {|x,y| p x,y}
^

f 1,2 do|x,y| p x,y end
1
2

as always, it is safe by enclosing parameters w parens

irb(main):035:0> f(1,2) {|x,y| p x,y}
1
2

irb(main):036:0> f(1,2) do|x,y| p x,y end
1
2

also, one-liner chain fans sees do-end as noisy and sensitive to spacing
(since do-ends are keywords)

irb(main):037:0> [1,2,3].map{|x| 2x}.map{|x|x+1}
=> [3, 5, 7]
irb(main):038:0> [1,2,3].map do|x| 2
x end.map do |x|x+1 end
=> [3, 5, 7]
irb(main):039:0> [1,2,3].mapdo|x| 2x end.map do |x|x+1 end
SyntaxError: compile error
(irb):39: syntax error, unexpected kEND, expecting $end
[1,2,3].mapdo|x| 2
x end.map do |x|x+1 end
^

nonetheless, i like both. i particularly like do-end since i like typing
fast without using shift. but if you have editors like textmate or
similar, no need :slight_smile:

kind regards -botp

Dear Friend,
You have told me that with example,but that is not suitable for me.
I have not changed anything from that,simple I have but one bracket.
It will not shows any error.
So,Your example also not suitable for my questions.
Please tell me some more examples with exaplantion.

def f a,b
yield a,b
end
nil
f 1,2 {|x,y| p x,y}
SyntaxError: compile error
(irb):4: syntax error, unexpected ‘{’, expecting $end
f 1,2 {|x,y| p x,y}
^
from (irb):4
from :0
f 1,2 do|x,y| p x,y end
1
2
nil
f (1,2) {|x,y| p x,y}
(irb):6: warning: don’t put space before argument parentheses
1
2
nil
f (1,2){|x,y| p x,y}
(irb):7: warning: don’t put space before argument parentheses
1
2
nil