`

Ruby 动态特性鉴赏

阅读更多

以下代码与代码学习来自<Ruby Best Practives>,主要描述了一幅生动的Ruby语言动态特性使用场景。

#!/usr/bin/env ruby
#
# encoding: utf-8
#

# Base module NativeCampingRoutes
module NativeCampingRoutes

    # This is a convenient way to make instance methods into class methods.
    # And you can use this method to make a singleton.
    # http://ozmm.org/posts/singin_singletons.html
    # 将成员对象方法上升为类方法
    extend self

    def R(url)
        route_lookup = routes
        # Get a class-object
        klass = Class.new

        # Modify the meta-class-object(klass)
        # Extend the modules' methods to klass
        meta = class << klass; self; end


        #meta class, overwrite the define_method
        #The following block will be called by Class.instance_eval
        meta.send(:define_method, :inherited) do |base|
            raise "Already defined" if route_lookup[url]
            route_lookup[url] = base
        end

        klass
    end

    def routes
        @routes ||= {}
    end

    def process(url, params={})
        routes[url].new.get(params)
    end
end

module NativeCampingRoutes

    #R '/hello'
    #   will create a class-object which has been overwrited the define_method
    class Hello < R '/hello'
        #This will be invoked by overwrited method(define_method)
        def get(params)
            puts "hello #{params[:name]}"
        end
    end
    class Goodbye < R '/goodbye'
        def get(params)
            puts "goodbye #{params[:name]}"
        end
    end
end

NativeCampingRoutes.process('/hello',:name=>'greg')
NativeCampingRoutes.process('/goodbye',:name=>'joe')

 

分享到:
评论

相关推荐

    Ruby动态特性详细介绍

    在ruby代码中,其实我们一直都在进行元编程,虽然可能只是一句非常简单的代码,比如说,在“”中嵌入一个表达式,这就是元编程。毕竟,嵌入的的表达式并非真正的代码,它只是一个字符串,但是ruby却可以将它转换成...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    Ruby是一门简洁、灵活而又优雅的动态编程语言,由日本开发者松本行弘(Yukihiro Matsumoto)于1993年创造。Ruby以其易读易写的语法、强大的面向对象编程和丰富的生态系统而备受开发人员的喜爱。本文将为您介绍Ruby的...

    ruby教程.rar

    ruby 1.6 特性 ruby 1.7 特性 ruby 1.8 特性 1.6.8到1.8.0的变更点(总结) ruby 1.9 特性 obsolete 对应DOSISH 附录 疑似BNF的Ruby语法 Ruby术语集 Ruby的运行平台 pack模板字符串 sprintf格式 Marshal...

    Ruby动态编程语言v2.6.3

    Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby 体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。 Ruby 是一个注重均衡的语言,它的发明者松本行弘(Yukihiro “Matz” ...

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    ruby DBI ruby DBI ruby DBI

    ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...

    Ruby for Rails

    所采用的Rails应用示例,既说明了Ruby的特性,也给出了有关Rails的重要信息。第四部分讲述了如何应用第二部分和第三部分的Ruby知识来开发Rails应用。 本书适合于Ruby的初学者,也适合于想要进一步提高Ruby编程...

    Ruby完全自学手册 下

    《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...

    Ruby编程,Ruby编程,

    Ruby编程,Ruby编程,Ruby编程,Ruby编程,Ruby编程,

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    Ruby中文文档.zip

    它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    Ruby入门到精通

    它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至...

    ruby笔记1ruby笔记1ruby笔记1

    ruby笔记1ruby笔记1ruby笔记1ruby笔记1ruby笔记1ruby笔记1

    ruby最新版稳定版

    它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码3

    ruby源代码 ruby源代码 ruby源代码 ruby源代码3

    Ruby-rubybuild编译和安装Ruby

    ruby-build - 编译和安装Ruby

    ruby安装包,window安装包

    它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,...

Global site tag (gtag.js) - Google Analytics