A, b = Array.new(2).map!{|x| data.dup}

I think I can replace this code

@scr = @output.dup
@png = @output.dup
@pdf = @output.dup
@svg = @output.dup
@ps = @output.dup

with this equivalent:

@scr, @png, @pdf, @svg, @ps = Array.new(5).map!{|x| @output.dup}

Is there a nicer variant available?

(Of course @scr, @png, @pdf, @svg, @ps = @output.dup will not work, I
need 5 independent instances.)

Thanks,

Stefan S.

Stefan S. wrote in post #983432:

I think I can replace this code

@scr = @output.dup
@png = @output.dup
@pdf = @output.dup
@svg = @output.dup
@ps = @output.dup

with this equivalent:

@scr, @png, @pdf, @svg, @ps = Array.new(5).map!{|x| @output.dup}

Is there a nicer variant available?

here’s one

@scr, @png, @pdf, @svg, @ps = Array.new(5) { @output.dup }

here’s another, not for <=1.8.6

@scr, @png, @pdf, @svg, @ps = 5.times.map { @output.dup }

But I think the original 5 lines is clearer :slight_smile:

On Thu, 24 Feb 2011 06:46:15 +0900
Stefan S. [email protected] wrote:

@scr, @png, @pdf, @svg, @ps = Array.new(5).map!{|x| @output.dup}

Is there a nicer variant available?

@scr, @png, @pdf, @svg, @ps = 5.times.collect { @output.dup }

Are you sure you can’t rework your code to not copy data 5x? I assume
you’re doing conversion between formats, so the output will be something
completely else anyway. No need to work in-place then (which I assume is
the reason you’re dup-ing).

– niklas

On Feb 23, 2011, at 14:00 , niklas | brueckenschlaeger wrote:

Are you sure you can’t rework your code to not copy data 5x? I assume
you’re doing conversion between formats, so the output will be something
completely else anyway. No need to work in-place then (which I assume is
the reason you’re dup-ing).

*ding *ding ding ding ding

WE HAVE A WINNAR!

On Thu, 2011-02-24 at 06:58 +0900, Brian C. wrote:
Stefan S. wrote in post #983432:

But I think the original 5 lines is clearer :slight_smile:

Thanks. I agree, but I am still learning Ruby, so I like to see what is
possible. And I like to save some lines of code. On the other hand,
plain code is easier to understand and can easier converted to other
languages, I know.

On Thu, Feb 24, 2011 at 6:24 AM, Stefan S. [email protected]
wrote:

On Thu, 2011-02-24 at 07:00 +0900, niklas | brueckenschlaeger wrote:

Are you sure you can’t rework your code to not copy data 5x?

The code is related to handling configuration files, I have a basic

ok, try also something like,

a,b,c,d,e =[x.dup]*5

best regards -botp

On Thu, 2011-02-24 at 07:00 +0900, niklas | brueckenschlaeger wrote:

Are you sure you can’t rework your code to not copy data 5x?

The code is related to handling configuration files, I have a basic
configuration set, a hash called @output. And variants for on screen,
pdf, png export. I can avoid duplicates, of course, if I look at the
basic hash and at the special variants each time. But that is a little
bit more complicated and consumes more time, which is not really good.

All that is related to a graphical editor – I have to clean up the code
a bit, it will become available on my page some time, then we can
discuss improvements. A tiny part related to cairo drawing is already
there:

http://www.ssalewski.de/PetEd-Demo.html.en

ok, try also something like,

a,b,c,d,e =[x.dup]*5

That will cause a, b, c, d, e to point to the same objects, which
might result in an unexpected side effect.

x = “foo”
a, b, c, d, e = [x.dup] * 5
puts a #=> “foo”
b << " bar"
puts a #=> “foo bar”

On Thu, Feb 24, 2011 at 1:40 PM, Anurag P.
[email protected] wrote:

ok, try also something like,

a,b,c,d,e =[x.dup]*5

That will cause a, b, c, d, e to point to the same objects,

indeed. but they will not point to or clobber x

which might result in an unexpected side effect.

indeed. but it may have a good effect too. the user is working on
graphics.

let’s just see if user has a need for it…

best regards -botp

On Thu, Feb 24, 2011 at 12:11 AM, botp [email protected] wrote:

Well, then you could just do
a = b = c = d = e = x.dup

No need for parallel assignment tricks if you are okay with them
pointing to
the same object.

On Thu, Feb 24, 2011 at 3:44 PM, Josh C. [email protected]
wrote:

Well, then you could just do
a = b = c = d = e = x.dup

indeed. i was too tight on parallels and arrays and forgetting the
fundamentals =)
thanks and kind regards -botp

On Thu, Feb 24, 2011 at 2:11 PM, botp [email protected] wrote:

let’s just see if user has a need for it…

my bad. should have read the whole op post… “…@stefan:… I
need 5 independent instances…”

sorry for the noise.
kind regards -botp

[@scr, @png, @pdf, @svg, @ps].collect!{|x| @output.dup}

oops, this doesn’t work… sorry

Stefan S. wrote in post #983443:

The code is related to handling configuration files, I have a basic
configuration set, a hash called @output. And variants for on screen,
pdf, png export.

In that case, I’d say you’d be better off avoiding all the separate
instance variables for each variant, and make it data-driven. Then you
can interate over the variants, which will naturally avoid the repeated
code.

FORMATS = [:scr, :png, :pdf, :svg, :ps]

@configs = {}
FORMATS.each { |k| @configs[k] = @output.dup }

Now you have @configs[:scr], @configs[:png] etc, all pointing to
separate copies of @output. And if you want to add another format in
future, it’s a trivial change.

(Aside: please do not post variants of this code using ‘inject’, because
it’s stupid here. You know who you are. Thank you.)

Regards,

Brian.

On Thu, 2011-02-24 at 18:09 +0900, Brian C. wrote:

FORMATS = [:scr, :png, :pdf, :svg, :ps]

@configs = {}
FORMATS.each { |k| @configs[k] = @output.dup }

This would be the same as:

@configs = Hash.new {|h,k| h[k] = @output.dup }

after that you can use pretty much any key you want :slight_smile:

– niklas

On Thu, 2011-02-24 at 11:10 +0530, Anurag P. wrote:

ok, try also something like,

a,b,c,d,e =[x.dup]*5

That will cause a, b, c, d, e to point to the same objects, which
might result in an unexpected side effect.

Indeed, that was not what I wanted, I need 5 independent instances!

Brian C. wrote:

FORMATS = [:scr, :png, :pdf, :svg, :ps]

Regards,

Brian.

I see the point, thanks.

Best regards,

Stefan S.

www.wholesalesnkey.net
windows 7
office 2007
office 2010
office visio key
windows visio key
windows xp key