[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Delayed string interpolation

Hal E. Fulton

2/8/2005 1:34:00 AM

I just wanted to make sure people don't overlook the
obvious:


def interp(x,y)
"The sum of #{x} and #{y} is #{x+y}"
end

str = interp(210,27) # "The sum of 210 and 27 is 237"


Perhaps there are cases where this is no good though.


Hal



3 Answers

Navindra Umanee

2/8/2005 1:46:00 AM

0

Hal Fulton <hal9000@hypermetrics.com> wrote:
> def interp(x,y)
> "The sum of #{x} and #{y} is #{x+y}"
> end
>
> str = interp(210,27) # "The sum of 210 and 27 is 237"

Unless I'm mistaken, this recomputes the whole string every time
interp is called. I wanted to compute the common parts of the string,
cache it somewhere, and then compute the rest in another context.

Hence, a 2-step interpolation.

Cheers,
Navin.


Hal E. Fulton

2/8/2005 1:55:00 AM

0

Navindra Umanee wrote:
> Hal Fulton <hal9000@hypermetrics.com> wrote:
>
>> def interp(x,y)
>> "The sum of #{x} and #{y} is #{x+y}"
>> end
>>
>> str = interp(210,27) # "The sum of 210 and 27 is 237"
>
>
> Unless I'm mistaken, this recomputes the whole string every time
> interp is called. I wanted to compute the common parts of the string,
> cache it somewhere, and then compute the rest in another context.
>
> Hence, a 2-step interpolation.

Yes, I'm sure there are some efficiency concerns. I've never
measured the performance in a case like this.

I wonder if it would be worthwhile to expose the internal
method which does interpolation? I've thought of this in
the past, but never seriously enough for an RCR. I think
that would be "prettier" than an explicit eval.

It would, of course, either have to operate in the current
binding or have a binding passed in.


Hal




William James

2/8/2005 8:40:00 AM

0


Hal Fulton wrote:
> I just wanted to make sure people don't overlook the
> obvious:
>
>
> def interp(x,y)
> "The sum of #{x} and #{y} is #{x+y}"
> end
>
> str = interp(210,27) # "The sum of 210 and 27 is 237"
>
>
> Perhaps there are cases where this is no good though.
>
>
> Hal

* Patchworkstr = Struct.new( "Patchworkstring",:start,:middle,:end)
* sentence = Patchworkstr.new( "There are " )
*
* sentence.end = " solutions."
* n = 3**3
* sentence["middle"] = n
*
* puts sentence.to_a.join

....prints
There are 27 solutions.