Movatterモバイル変換


[0]ホーム

URL:


Skip to content
Search Gists
Sign in Sign up

Instantly share code, notes, and snippets.

@amatsuda
CreatedAugust 15, 2013 00:54
    • Star(11)You must be signed in to star a gist
    • Fork(0)You must be signed in to fork a gist

    Select an option

    Save amatsuda/6237320 to your computer and use it in GitHub Desktop.
    Kernel.class_evaldo
    #FIXME this is terrible
    defstatic(meth)
    define_singleton_method(meth)do |*args, &b|
    new.sendmeth, *args, &b
    end
    meth
    end
    defabstract(meth)
    define_method(meth){raise"Please implement#{self.class.name}##{meth}."}
    meth
    end
    deffinal(meth)
    self.extendModule.new{define_method(:method_added){|added_meth|raise("Overriding or redefining#{meth} is prohibited.")ifadded_meth ==meth;super(added_meth);}}
    meth
    end
    defnative(meth)
    meth
    end
    deffriend(meth)
    #TODO
    meth
    end
    defsynchronized(meth)
    #TODO
    meth
    end
    defvoid(meth)
    meth
    end
    defvirtual(meth)
    meth
    end
    defoverride(meth)
    raise"#{self.name}##{meth} is not defined."unlessancestors[1..-1].any?{|a|a.method_defined?meth}
    meth
    end
    end
    classHello
    abstractvoiddefaaa
    p:aaaaa
    end
    publicstaticfinalvoiddefmain(*)
    puts'hello, world'
    end
    end
    classHello2 <Hello
    overridedefaaa
    p'hello2'
    end
    end
    Hello2.new.aaa
    Hello.main
    #=> hello, world
    @sakuro
    Copy link

    override は arity の一致をチェックしたほうがいいかもしれません。あと、finalと競合するとか。

    @tadd
    Copy link

    overrideはやっぱり、@Overrideにした方が!

    Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

    [8]ページ先頭

    ©2009-2025 Movatter.jp