`concat': can't modify frozen string in benchmark.rb

Discussion in 'Ruby' started by Peña, Botp, May 31, 2007.

  1. Peña, Botp

    Peña, Botp Guest

    Hi All,

    C:\family\ruby>cat test.rb
    def f(command_here)
    `#{command_here}`
    end
    a =3D { "Local copy"=3D>"copy test.txt test.txt2" }
    require 'benchmark'
    Benchmark.bmbm do |x|
    a.each do |k,v|
    x.report(k) { f v }
    end
    end

    C:\family\ruby>ruby test.rb
    c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `concat': can't modify frozen =
    string (T
    ypeError)
    from c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `report'
    from test.rb:12
    from test.rb:11:in `each'
    from test.rb:11
    from c:/ruby/lib/ruby/1.8/benchmark.rb:250:in `bmbm'
    from test.rb:10
    C:\family\ruby>

    if i comment out line 334 in benchmark.rb like so,

    #label.concat ' '

    It works.
    It also works for the ff cases
    x.report(k) { f v }
    x.report() { f v }
    x.report("") { f v }
    x.report("test") { f v }

    What is the relevance of line 334 in benchmark.rb?
    If the line is important, how can I fix my program so I can pass a var =
    in x.report?

    thank you and kind regards -botp
     
    Peña, Botp, May 31, 2007
    #1
    1. Advertising

  2. Peña wrote:
    > Hi All,
    >
    > C:\family\ruby>cat test.rb
    > def f(command_here)
    > `#{command_here}`
    > end
    > a = { "Local copy"=>"copy test.txt test.txt2" }
    > require 'benchmark'
    > Benchmark.bmbm do |x|
    > a.each do |k,v|
    > x.report(k) { f v }
    > end
    > end
    >
    > C:\family\ruby>ruby test.rb
    > c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `concat': can't modify frozen string (T
    > ypeError)
    > from c:/ruby/lib/ruby/1.8/benchmark.rb:334:in `report'
    > from test.rb:12
    > from test.rb:11:in `each'
    > from test.rb:11
    > from c:/ruby/lib/ruby/1.8/benchmark.rb:250:in `bmbm'
    > from test.rb:10
    > C:\family\ruby>
    >
    > if i comment out line 334 in benchmark.rb like so,
    >
    > #label.concat ' '
    >
    > It works.
    > It also works for the ff cases
    > x.report(k) { f v }
    > x.report() { f v }
    > x.report("") { f v }
    > x.report("test") { f v }
    >
    > What is the relevance of line 334 in benchmark.rb?
    > If the line is important, how can I fix my program so I can pass a var in x.report?
    >
    > thank you and kind regards -botp
    >


    A quick workaround would be to use k.dup:

    x.report(k.dup) { f v }

    Apparently, benchmark is being bad and munging its inputs (and falling
    down when one of them happens to be frozen because it is also a hash key).

    --
    vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
     
    Joel VanderWerf, May 31, 2007
    #2
    1. Advertising

  3. Peña, Botp

    Peña, Botp Guest

    From: Joel VanderWerf [mailto:] :
    # A quick workaround would be to use k.dup:
    #=20
    # x.report(k.dup) { f v }

    brilliant insight. I never even tested that, thinking k.dup would just =
    be another var/object. And besides, it does not even look *right :)

    # Apparently, benchmark is being bad and munging its inputs=20
    # (and falling=20
    # down when one of them happens to be frozen because it is also=20
    # a hash key).

    it is really weird.
    thank you and kind regards -botp
     
    Peña, Botp, May 31, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. est
    Replies:
    1
    Views:
    594
  2. Elias Athanasopoulos

    modify a frozen object

    Elias Athanasopoulos, Nov 13, 2003, in forum: Ruby
    Replies:
    0
    Views:
    93
    Elias Athanasopoulos
    Nov 13, 2003
  3. LC Geldenhuys
    Replies:
    5
    Views:
    280
    Robert Klemme
    Feb 18, 2004
  4. Joel VanderWerf

    safe to modify frozen object from C?

    Joel VanderWerf, Apr 26, 2004, in forum: Ruby
    Replies:
    2
    Views:
    103
    Joel VanderWerf
    Apr 26, 2004
  5. Une Bévue
    Replies:
    3
    Views:
    209
    Une Bévue
    Apr 25, 2010
Loading...

Share This Page