Velocity Reviews > Ruby > Delayed string interpolation

# Delayed string interpolation

Hal Fulton
Guest
Posts: n/a

 02-08-2005
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

Navindra Umanee
Guest
Posts: n/a

 02-08-2005
Hal Fulton <(E-Mail Removed)> 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 Fulton
Guest
Posts: n/a

 02-08-2005
Navindra Umanee wrote:
> Hal Fulton <(E-Mail Removed)> 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
Guest
Posts: n/a

 02-08-2005

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.