How to write this correctly?

Hi,

In python this is right:

"Hello, %s %s" %("Matz!","again")

'Hello, Matz! again'

But in ruby it will get wrong:

"Hello, %s %s" %("Matz!","again")
SyntaxError: (irb):39: syntax error, unexpected ',', expecting ')'
"Hello, %s %s" %("Matz!","again")
                         ^
        from /usr/bin/irb:12:in `<main>'

So what's the correct syntax for this case?
Thanks.

Oh sorry I have found that.
need to convert the arguments to an array.

"Hello, %s %s" %(["Matz!","again"])
=> "Hello, Matz! again"

···

On Mon, Dec 14, 2009 at 3:03 PM, Ruby Newbee <rubynewbee@gmail.com> wrote:

Hi,

In python this is right:

"Hello, %s %s" %("Matz!","again")

'Hello, Matz! again'

But in ruby it will get wrong:

"Hello, %s %s" %("Matz!","again")
SyntaxError: (irb):39: syntax error, unexpected ',', expecting ')'
"Hello, %s %s" %("Matz!","again")
^
from /usr/bin/irb:12:in `<main>'

So what's the correct syntax for this case?
Thanks.

Ruby Newbee wrote:

Oh sorry I have found that.
need to convert the arguments to an array.

"Hello, %s %s" %(["Matz!","again"])
=> "Hello, Matz! again"

> Hi,
>
> In python this is right:
>
>>>> "Hello, %s %s" %("Matz!","again")
> 'Hello, Matz! again'
>
>
> But in ruby it will get wrong:
>
> "Hello, %s %s" %("Matz!","again")
> SyntaxError: (irb):39: syntax error, unexpected ',', expecting ')'
> "Hello, %s %s" %("Matz!","again")
> ^
> from /usr/bin/irb:12:in `<main>'
>
>
>
> So what's the correct syntax for this case?
> Thanks.
>

"Hello, %s %s" % ["Matz!", "again"]
    ==>"Hello, Matz! again"
"Hello, %s %s" % %w(Matz! again)
    ==>"Hello, Matz! again"

···

On Mon, Dec 14, 2009 at 3:03 PM, Ruby Newbee <rubynewbee@gmail.com> > wrote:

--

Hi,

Oh sorry I have found that.
need to convert the arguments to an array.

"Hello, %s %s" %(["Matz!","again"])
=> "Hello, Matz! again"

Be aware that % is interpreted as an operator because of the
string in front of it. There is also a shortcut

  %("Matz!","again")

for

  %Q("Matz!","again")

which would be a string.

What you do is applying the mod(%) operator to a string:

  str % array
  "%s %d %f" % [ "hi", 33, 0.618] #=> "hi 33 0.618000"

Omit the parenthesis and write

  "Hello, %s %s" % ["Matz!","again"]

or even

  "Hello, %s %s" % %w(Matz! again)

Bertram

···

Am Montag, 14. Dez 2009, 16:05:54 +0900 schrieb Ruby Newbee:

--
Bertram Scharpf
Stuttgart, Deutschland/Germany
*
Discover String#notempty? at <http://raa.ruby-lang.org/project/step>.

"Hello, %s %s" % ["Matz!", "again"]
   ==>"Hello, Matz! again"
"Hello, %s %s" % %w(Matz! again)
   ==>"Hello, Matz! again"

Or for those who prefer:

   str = sprintf("Hello, %s %s", "Matz!", "again")

Or variations such as:

   array = %w[Matz! again]
   sprintf("Hello, %s %s", *array)

Or of course, printf will format and output as well:

   printf("Hello, %s %s", "Matz!", "again")

Cheers,
Hal

Hi,

Oh sorry I have found that.
need to convert the arguments to an array.

"Hello, %s %s" %(["Matz!","again"])
=> "Hello, Matz! again"

Be aware that % is interpreted as an operator because of the
string in front of it. There is also a shortcut

%("Matz!","again")

for

%Q("Matz!","again")

which would be a string.

Actually, I'm not sure how that % before the ( is being seen by the parser.

By itself

%("Matz!","again")
=> "\"Matz!\",\"again\""

For either Ruby 1.8.6 or 1.9.

%( should interpret everything up to the the matching ) as part of a
string including the "'s and the , I'm not sure why it doesn't do the
same thing as:

> "Hello, %s %s" % "\"Matz!\",\"again\""
ArgumentError: too few arguments
  from (irb):3:in `%'
  from (irb):3

Since the format string needs two substitutions and we are only giving it one.

Perhaps a subtle Ruby parsing/lexing bug.

What you do is applying the mod(%) operator to a string:

str % array
"%s %d %f" % [ "hi", 33, 0.618] #=> "hi 33 0.618000"

No, this is sending the message % to the string. String#% is NOT mod,
the documentation (informally calls it format) and directs you to
Kernel#sprintf for further explanation.

Other that sharing the name :'&' with the methods in the various
Numeric subclasses, there's no meaning of mod.

···

On Mon, Dec 14, 2009 at 4:59 AM, Bertram Scharpf <lists@bertram-scharpf.de> wrote:

Am Montag, 14. Dez 2009, 16:05:54 +0900 schrieb Ruby Newbee:

--
Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale