'and' keyword?

Discussion in 'Ruby' started by list. rb, Dec 4, 2008.

  1. list. rb

    list. rb Guest

    [Note: parts of this message were removed to make it a legal post.]

    Because puts("hi") yields nil, the second item never gets called:
    puts "hi" and puts "bye" if true

    I can work around it with these:
    !puts "hi" and puts "bye" if true
    puts "hi";puts "bye" if true
    [puts("hi"), puts("bye")] if true

    --But was hoping there was a more aesthetic one liner out there that can use
    'and'..

    Thanks in advance!!
     
    list. rb, Dec 4, 2008
    #1
    1. Advertising

  2. On 04.12.2008, at 05:38 , list. rb wrote:

    > Because puts("hi") yields nil, the second item never gets called:
    > puts "hi" and puts "bye" if true
    >
    > I can work around it with these:
    > !puts "hi" and puts "bye" if true
    > puts "hi";puts "bye" if true
    > [puts("hi"), puts("bye")] if true
    >
    > --But was hoping there was a more aesthetic one liner out there that
    > can use
    > 'and'..
    >
    > Thanks in advance!!



    How about

    puts "hi", "bye" if true

    einarmagnus
     
    Einar Magnús Boson, Dec 4, 2008
    #2
    1. Advertising

  3. list. rb

    Peña, Botp Guest

    From: list. rb [mailto:]=20
    # Because puts("hi") yields nil, the second item never
    # gets called:

    you can create your own puts/print that returns true or whatever
     
    Peña, Botp, Dec 4, 2008
    #3
  4. List Rb wrote:
    > Because puts("hi") yields nil, the second item never gets called:
    > puts "hi" and puts "bye" if true
    >
    > I can work around it with these:
    > !puts "hi" and puts "bye" if true
    > puts "hi";puts "bye" if true
    > [puts("hi"), puts("bye")] if true
    >
    > --But was hoping there was a more aesthetic one liner out there that can
    > use
    > 'and'..
    >
    > Thanks in advance!!


    In my opinion, using logical operators with side-effects is bad style.
    I'd try to avoid it.

    Regards
    Stefan
    --
    Posted via http://www.ruby-forum.com/.
     
    Stefan Rusterholz, Dec 4, 2008
    #4
  5. List Rb wrote:
    > Because puts("hi") yields nil, the second item never gets called:
    > puts "hi" and puts "bye" if true


    I guess what you're trying to compress is this:

    if true
    puts "hi"
    puts "bye"
    end

    If you really want a one-liner, then your best option is probably

    (puts "hi"; puts "bye") if true

    (The parentheses ARE needed here. Otherwise puts "hi" is run always)

    If these are actually both calls to puts then you only need a single
    one:

    puts "hi","bye" if true

    Everything else gets yucky. For example, you can rely on the nil return
    value of puts:

    puts "hi" or puts "bye" if true

    puts("hi") || puts("bye") if true
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Dec 4, 2008
    #5
  6. list. rb

    Robert Dober Guest

    What about?

    puts %w{ hi bye }

    R.
    --=20
    Ne baisse jamais la t=EAte, tu ne verrais plus les =E9toiles.

    Robert Dober ;)
     
    Robert Dober, Dec 4, 2008
    #6
  7. list. rb

    List.rb Guest

    On Dec 4, 2008, at 3:51 PM, "Robert Dober" <> =20
    wrote:

    > What about?
    >
    > puts %w{ hi bye }
    >
    > R.
    > --=20
    > Ne baisse jamais la t=C3=AAte, tu ne verrais plus les =C3=A9toiles.
    >
    > Robert Dober ;)
    >



    In English, I woud say..

    jump and shout unless someone is sleeping.

    Ruby is so elegant that I fidng myself wanting to write similarly,.

    jump and shout unless someone.sleeping?

    :-(


    Just wish it's was interpreted as such=20=
     
    List.rb, Dec 4, 2008
    #7
  8. list. rb

    Robert Dober Guest

    On Thu, Dec 4, 2008 at 11:28 PM, David A. Black <> wrote:
    I do not think highly of the following code in general, but if this is
    about some literal programming idea it might come in handy. Children
    just do not use it when home alone ;)

    irb(main):010:0> class Object
    irb(main):011:1> def and &blk
    irb(main):012:2> blk.call
    irb(main):013:2> end
    irb(main):014:1> end
    => nil
    irb(main):015:0> puts( 42 ).and { puts 42 }.and { puts 42 }
    42
    42
    42

    Cheers
    R.
     
    Robert Dober, Dec 5, 2008
    #8
    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. Alek Nazarian
    Replies:
    7
    Views:
    3,266
    Alek Nazarian
    Oct 22, 2003
  2. Marc Twain
    Replies:
    5
    Views:
    357
    Roedy Green
    Jan 7, 2004
  3. Replies:
    10
    Views:
    569
  4. Replies:
    6
    Views:
    478
    Peter Otten
    May 10, 2007
  5. Hamilton, William

    RE: keyword checker - keyword.kwlist

    Hamilton, William, May 10, 2007, in forum: Python
    Replies:
    4
    Views:
    372
Loading...

Share This Page