P
Peña, Botp
(e-mail address removed) wrote in message
tochigi.jp>...Hi,
At Wed, 2 Jun 2004 03:43:42 +0900,
Sam Sungshik Kong wrote in [ruby-talk:102028]:s = "My name is %(name)s and my age is %(age)d." % {"name": "Sam",
"age": 34}I know that ruby has "#{name}" expression.
But that requires a variable named "name" in advance.
I want to bind the format string and data later.
I proposed that feature once in [ruby-dev:16351], though rejected, but
still I think that it would be useful for I18N. Is it worth for RCR?
Do you have an example on how would you use this? I ask
because I would also vote strongly against it.
One of the things that I really loved about ruby while
learning it was its "#{}" syntax, as it seemed to me a much
more consistent way of achieving what sprintf, $, %, etc.
have been trying for years to achieve in languages like C,
perl, python, etc.
[snip good examples]
The %s syntax is anything but readable once you have more
than 3 elements. Using a hash to try to clarify it seems to
me more of a crutch for languages that do not support ruby's
extremely powerful "#{}" formating. That syntax still forces
me to look for meaning of the text format string in two
different places (in the location of the text and at the end
of it), instead of in a single place as I read the string,
which seems like a step backwards overall.
I think the op implied late binding or late generation of string and
variables/hashes. I think ruby can do this w finesse, so we've seen examples
of workarounds immediately posted (thanks guys, I learned a lot here).
Thus
given foo_string % foo_hash, one can generate foo_string anytime one
wants and just tells it to "Hey foo_string, get your values from foo_hash".
foo_hash of course may contain a lot of key-val pairs. We need not
care/worry of the order or counts of the vars since the foo_string will just
pickup what it wants.
This style is also good for structures and records in db, imho.
I hope I was thinking straight here. Pls correct me guys if I'm wrong.
In this regard, I vote for Nobu's rcr.
kind regards -botp