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.

···

--
Posted via http://www.ruby-forum.com/.

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

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

# 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| 2*x}.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| 2*x 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

···

From: Arul hari [mailto:hariharan.spc@rediffmail.com]

Sebastian Hungerecker 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.

···

--
Posted via http://www.ruby-forum.com/\.

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

···

On 10/30/07, Sebastian Hungerecker <sepp2k@googlemail.com> 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.

--
what do I think about Ruby?
http://ruby-smalltalk.blogspot.com/

Peña, Botp wrote:

From: Arul hari [mailto:hariharan.spc@rediffmail.com]
# 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| 2*x}.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| 2*x 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
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

···

from :0

--
Posted via http://www.ruby-forum.com/\.

Arul hari wrote:

Sebastian Hungerecker 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

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Sebastian Hungerecker wrote:

Arul hari wrote:

Sebastian Hungerecker 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.

···

--
Posted via http://www.ruby-forum.com/\.