Syntax question from a newbie to Ruby

I am just learning Ruby and I can not seem to see why the first example
works but the second one does not - thanks

Why does this work:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
puts 'I think '
puts (number.to_i + 1)
puts 'may be a better favorite number though...'
puts '-----------------------------------------------------'

But this does not:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
puts 'I think ' + (number.to_i + 1) + ' may be a better favorite number
though...'
puts '-----------------------------------------------------'

···

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

David Spitzer wrote:

I am just learning Ruby and I can not seem to see why the first example
works but the second one does not - thanks

Why does this work:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
puts 'I think '
puts (number.to_i + 1)
puts 'may be a better favorite number though...'
puts '-----------------------------------------------------'

But this does not:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
puts 'I think ' + (number.to_i + 1) + ' may be a better favorite number
though...'
puts '-----------------------------------------------------'

i got it to work with this:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
newnumber = (number.to_i + 1.to_i)
puts 'I think ' + newnumber.to_s + ' may be a better favorite number
though...'
puts '-----------------------------------------------------'

is there a way to get it to work with another variable (newnumber)
adding them first then converting it to a string in the text line?

···

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

David Spitzer wrote:

puts 'Hello what is you\'re Favorite Number?'

Well, there's your /first/ syntax error.

puts 'I think ' + (number.to_i + 1) + ' may be a better favorite number
though...'

Since "+" can mean either "concatenate strings" or "add numbers", you need a "to_s" there, just as you needed "to_i" before trying arithmetic.

···

--
John W. Kennedy
  "Though a Rothschild you may be
In your own capacity,
     As a Company you've come to utter sorrow--
But the Liquidators say,
'Never mind--you needn't pay,'
     So you start another company to-morrow!"
   -- Sir William S. Gilbert. "Utopia Limited"

John W Kennedy wrote:

David Spitzer wrote:

puts 'Hello what is you\'re Favorite Number?'

Well, there's your /first/ syntax error.

puts 'I think ' + (number.to_i + 1) + ' may be a better favorite number
though...'

Since "+" can mean either "concatenate strings" or "add numbers", you
need a "to_s" there, just as you needed "to_i" before trying arithmetic.
--
John W. Kennedy
  "Though a Rothschild you may be
In your own capacity,
     As a Company you've come to utter sorrow--
But the Liquidators say,
'Never mind--you needn't pay,'
     So you start another company to-morrow!"
   -- Sir William S. Gilbert. "Utopia Limited"

Aha it worked!:

puts 'I think ' + (number.to_i + 1).to_s + ' may be a better favorite
number though...'

thanks!

···

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

i got it to work with this:

puts 'Hello what is you\'re Favorite Number?'
number = gets.chomp
puts''
puts'-----------------------------------------------------'
puts 'Your favorite number is ' ''+ number + '?'
puts ''
puts 'What a Lovely Number!'
puts ''
newnumber = (number.to_i + 1.to_i)
puts 'I think ' + newnumber.to_s + ' may be a better favorite number
though...'
puts '-----------------------------------------------------'

is there a way to get it to work with another variable (newnumber)
adding them first then converting it to a string in the text line?

Also, try this:

puts <<EOT

···

-----------------------------------------------------
Your favorite number is #{number}?

What a Lovely Number!

I think #{number.to_i + 1} may be a better favorite number though...
-----------------------------------------------------
EOT

David Spitzer wrote:

John W Kennedy wrote:

David Spitzer wrote:

puts 'Hello what is you\'re Favorite Number?'

Well, there's your /first/ syntax error.

puts 'I think ' + (number.to_i + 1) + ' may be a better favorite number
though...'

Since "+" can mean either "concatenate strings" or "add numbers", you
need a "to_s" there, just as you needed "to_i" before trying arithmetic.
--
John W. Kennedy
  "Though a Rothschild you may be
In your own capacity,
     As a Company you've come to utter sorrow--
But the Liquidators say,
'Never mind--you needn't pay,'
     So you start another company to-morrow!"
   -- Sir William S. Gilbert. "Utopia Limited"

Aha it worked!:

puts 'I think ' + (number.to_i + 1).to_s + ' may be a better favorite number though...'

thanks!

I don't see use of Ruby's streams used much in examples:

$stdout << "I think " << number + 1 << " may be a better favorite\n"

It's much cleaner, although not as simple a concept as print.

Mike

I'd rather do

puts "I think #{number.to_i + 1} may be a better favorite number though..."

Or, if you are a fan of printf

printf "I think %d may be a better favorite number though...\n",
   number.to_i + 1

Kind regards

  robert

···

On 18.11.2008 23:56, David Spitzer wrote:

Aha it worked!:

puts 'I think ' + (number.to_i + 1).to_s + ' may be a better favorite number though...'

..
# $stdout << "I think " << number + 1 << " may be a better favorite\n"
# It's much cleaner, although not as simple a concept as print.

well you can extend ruby to your liking,

def prints *list
  list.each do |item|

* $stdout << item

  end
end

=> nil

prints "I think ", number + 1, " may be a better favorite\n" I think 2 may be a better favorite

=> ["I think ", 2, " may be a better favorite\n"]

w the added adv that you get an array (of listing) too, ergo, the ff works, too

prints (prints "I think ", number + 1, " may be a better favorite\n")

I think 2 may be a better favorite
I think 2 may be a better favorite
=> [["I think ", 2, " may be a better favorite\n"]]

···

From: Mike Austin [mailto:"mike[nospam]"@mike-austin.com]

Robert Klemme wrote:

···

On 18.11.2008 23:56, David Spitzer wrote:
puts "I think #{number.to_i + 1} may be a better favorite number
though..."

I think you can skip the .to_i when the number is inside #{}. In other
words, I think it would be valid and a little more readable to say:

puts "I think #{number + 1} may be a better favorite number though..."
--
Posted via http://www.ruby-forum.com/\.

With the exception that this method returns an array, there is no
difference between it and print. Try:

print "foo ", "bar ", "baz"

···

On Tue, Nov 18, 2008 at 8:48 PM, Peña, Botp <botp@delmonte-phil.com> wrote:

From: Mike Austin [mailto:"mike[nospam]"@mike-austin.com]
..
# $stdout << "I think " << number + 1 << " may be a better favorite\n"
# It's much cleaner, although not as simple a concept as print.

well you can extend ruby to your liking,

def prints *list
  list.each do |item|

* $stdout << item

  end
end

=> nil

--
Technical Blaag at: http://blog.majesticseacreature.com | Non-tech
stuff at: http://metametta.blogspot.com

Robert Klemme wrote:

puts "I think #{number.to_i + 1} may be a better favorite number though..."

I think you can skip the .to_i when the number is inside #{}.

No. Whether you can skip to_i solely depends on the type of "number". Btw, you can easily test that (see below).

In other words, I think it would be valid and a little more readable to say:

puts "I think #{number + 1} may be a better favorite number though..."

irb(main):001:0> "1"+2
TypeError: can't convert Fixnum into String
         from (irb):1:in `+'
         from (irb):1
irb(main):002:0>

This has nothing to do where the expression appears. IIRC number is a String here so you must convert it to do integer math.

Cheers

  robert

···

On 20.11.2008 17:15, Michael Tomer wrote:

On 18.11.2008 23:56, David Spitzer wrote:

IIRC number is a String here so you must convert it to do integer math.

Yes, you're completely right. I forgot he grabbed the variable from
STDIN.

···

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