what is the difference between two block?

Discussion in 'Ruby' started by Arul hari, Oct 30, 2007.

  1. Arul hari

    Arul hari Guest

    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, Oct 30, 2007
    #1
    1. Advertising

  2. 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:
    ICQ: 205544826
    Sebastian Hungerecker, Oct 30, 2007
    #2
    1. Advertising

  3. Arul hari

    Arul hari Guest

    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/.
    Arul hari, Oct 30, 2007
    #3
  4. 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:
    ICQ: 205544826
    Sebastian Hungerecker, Oct 30, 2007
    #4
  5. Arul hari

    Arul hari Guest

    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/.
    Arul hari, Oct 30, 2007
    #5
  6. Arul hari

    Robert Dober Guest

    On 10/30/07, 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.
    >

    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



    --
    what do I think about Ruby?
    http://ruby-smalltalk.blogspot.com/
    Robert Dober, Oct 30, 2007
    #6
  7. Arul hari

    Arul hari Guest

    Peña, Botp wrote:
    > From: Arul hari [mailto:]
    > # 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 :)
    >
    > 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

    --
    Posted via http://www.ruby-forum.com/.
    Arul hari, Oct 30, 2007
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. z. f.
    Replies:
    3
    Views:
    1,337
    Stephen Woolhead
    Sep 7, 2004
  2. jakk
    Replies:
    4
    Views:
    12,130
  3. tankbattle
    Replies:
    1
    Views:
    796
    George Bina
    Jul 21, 2006
  4. morrell
    Replies:
    1
    Views:
    947
    roy axenov
    Oct 10, 2006
  5. Just Another Victim of the Ambient Morality

    What's the difference between these two block passing strategies?

    Just Another Victim of the Ambient Morality, Jul 20, 2006, in forum: Ruby
    Replies:
    1
    Views:
    86
    Erik Veenstra
    Jul 20, 2006
Loading...

Share This Page