[MacRuby-devel] MacRuby not finding a method that Ruby is

Edward Hynes mred at dharmagaia.com
Wed Oct 7 21:16:35 PDT 2009


I'm still on a 32-bit machine, so can't try 0.5 yet :^(

I did manage to find a workaround, however, by creating an alias for  
the 'initialize' method and then calling it instead of 'super' inside  
of the 'define_method' call.

Ed

On Oct 7, 2009, at 10:51 PM, Matt Aimonetti wrote:

> you might want to try your luck with 0.5
>
> - Matt
>
> On Wed, Oct 7, 2009 at 7:37 PM, Edward Hynes <mred at dharmagaia.com>  
> wrote:
> Hi,
>
> I'm attempting to use the RParsec gem under MacRuby, but am getting  
> a NoMethodError when it loads.  I've create a test file that simply  
> adds my local gem directory to the front of the library search path  
> and then calls "require 'rparsec'".  This file runs fine under Ruby  
> 1.9, but produces the following error when called from MacRuby 0.4.
>
> /Users/ehynes/Test/Gems/rparsec/parser.rb:32:in `block in init':  
> super: no superclass method `initialize:' for  
> RParsec::ValueParser:RParsec::ValueParser (NoMethodError)
>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:621:in `new'
>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:621:in  
> `<module:RParsec>'
>        from /Users/ehynes/Test/Gems/rparsec/parsers.rb:3:in `<top  
> (required)>'
>        from /Users/ehynes/Test/Gems/rparsec.rb:3:in `require'
>        from /Users/ehynes/Test/Gems/rparsec.rb:3:in `block in <top  
> (required)>'
>        from /Users/ehynes/Test/Gems/rparsec.rb:2:in `each'
>        from /Users/ehynes/Test/Gems/rparsec.rb:2:in `<top (required)>'
>        from AbcParser.rb:2:in `require'
>        from AbcParser.rb:2:in `<main>'
>
>
> The method with the error in the Parser class is:
>
>  def self.init(*vars)
>    parser_checker = {}
>    vars.each_with_index do |var, i|
>      name = var.to_s
>      parser_checker[i] = var if name.include?('parser') && ! 
> name.include?('parsers')
>    end
>    define_method(:initialize) do |*params|
> --->  super()   # <--- line 32
>      vars.each_with_index do |var, i|
>        param = params[i]
>        if parser_checker.include? i
>          TypeChecker.check_arg_type Parser, param, self, i
>        end
>        instance_variable_set("@"+var.to_s, param)
>      end
>    end
>  end
>
>
> Any ideas as to why Ruby can call super in the above method, but  
> MacRuby can't?  Is there a fix or workaround that I could use?  An  
> alternate parser?
>
> Thanks,
> Ed
>
>
> P.S.  I did have to change one line in the RParsec parser.rb file to  
> get it to run under Ruby 1.9, replacing a ':' with a 'then' in a  
> case statement.
>
>        $ diff parser_original.rb parser.rb
>        881c881
>        <     case c when String: c[0] else c end
>        ---
>        >     case c when String then c[0] else c end  # ':' replaced  
> with 'then'
>
>
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

-- 
Edward Hynes
Dharma Gaia LLC
"Software with the Earth in Mind"
http://dharmagaia.com



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20091008/27b33d90/attachment-0001.html>


More information about the MacRuby-devel mailing list