Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > How to write this correctly?

Reply
Thread Tools

How to write this correctly?

 
 
Ruby Newbee
Guest
Posts: n/a
 
      12-14-2009
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.

 
Reply With Quote
 
 
 
 
Ruby Newbee
Guest
Posts: n/a
 
      12-14-2009
Oh sorry I have found that.
need to convert the arguments to an array.

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



On Mon, Dec 14, 2009 at 3:03 PM, Ruby Newbee <(E-Mail Removed)> 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")
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=

=A0 =C2=A0 ^
> =C2=A0 =C2=A0 =C2=A0 =C2=A0from /usr/bin/irb:12:in `<main>'
>
>
>
> So what's the correct syntax for this case?
> Thanks.
>


 
Reply With Quote
 
 
 
 
W. James
Guest
Posts: n/a
 
      12-14-2009
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"
>
>
>
> On Mon, Dec 14, 2009 at 3:03 PM, Ruby Newbee <(E-Mail Removed)>
> 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.
> >


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

--

 
Reply With Quote
 
Hal Fulton
Guest
Posts: n/a
 
      12-14-2009
[Note: parts of this message were removed to make it a legal post.]

>
> "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

 
Reply With Quote
 
Bertram Scharpf
Guest
Posts: n/a
 
      12-14-2009
Hi,

Am Montag, 14. Dez 2009, 16:05:54 +0900 schrieb Ruby Newbee:
> 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


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

 
Reply With Quote
 
Rick DeNatale
Guest
Posts: n/a
 
      12-14-2009
On Mon, Dec 14, 2009 at 4:59 AM, Bertram Scharpf
<(E-Mail Removed)> wrote:
> Hi,
>
> Am Montag, 14. Dez 2009, 16:05:54 +0900 schrieb Ruby Newbee:
>> Oh sorry I have found that.
>> need to convert the arguments to an array.
>>
>> "Hello, %s %s" %(["Matz!","again"])
>> =3D> "Hello, Matz! again"

>
> Be aware that % is interpreted as an operator because of the
> string in front of it. There is also a shortcut
>
> =A0%("Matz!","again")
>
> for
>
> =A0%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")
=3D> "\"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 o=
ne.

Perhaps a subtle Ruby parsing/lexing bug.

> What you do is applying the mod(%) operator to a string:
>
> =A0str % array
> =A0"%s %d %f" % [ "hi", 33, 0.618] =A0 =A0 #=3D> "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.

--=20
Rick DeNatale

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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
How to use Response.write to write to a specific area on a aspx pa =?Utf-8?B?QWJlbCBDaGFu?= ASP .Net 6 05-03-2006 10:16 PM
DVD Write speed - Not able to write at 8 speed Vincent Wonnacott Computer Support 1 09-16-2004 03:14 PM
write a union object using write JasBascom C++ 1 02-24-2004 08:18 AM
How to open a new console and write something out write printf() Peter Hansen C++ 1 08-24-2003 11:49 AM



Advertisments