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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs