Syntax question from a newbie to Ruby


#1

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 ‘-----------------------------------------------------’


#2

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?


#3

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”


#4

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…


#5

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!


#6

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…’

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


#7

Robert K. 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…”


#8

From: Mike A. [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

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”]]


#9

On Tue, Nov 18, 2008 at 8:48 PM, Peña, Botp removed_email_address@domain.invalid wrote:

end
end
=> nil

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

print "foo ", "bar ", “baz”


#10

On 20.11.2008 17:15, Michael Tomer wrote:

Robert K. 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 #{}.

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


#11

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.