zoukankan      html  css  js  c++  java
  • Ruby 元编程

    Ruby 随着美元在抽象的层面语言的编程支持。相当强大,假定商业模式有一个非常大的阶段似性别,我相信元编程让你节省大量的代码。

    对于一小部分,如以下。(在这里,我们只使用一个class_eval , 并且instance_eval, module_eval, Function.parameters等大量方法能够调用)

    比方 。依据业务需求。须要创建多个有相似方法名的类, 比方方法都命令为 include_xxx, append_xxx, delete_xxx,  xxxs等 xxx 为详细的业务类。

    那么能够设计例如以下一个类。 实现此功能。

    module Factory
        def  self.build_class(classname, cls_type)
            sub_clss = cls_type.to_s.downcase
            new_cls.class_eval <<-CLASSDEF
                def initialize
                    @container = []
                end

                def append_#{sub_clss}(key)
                    @container << key
                end

                def delete_#{sub_clss}(key)
                    @container.delete_if{|e| e == key}
                end

                def include_#{sub_clss}?(key)
                    @container.find {|e| e == key} ? true : false
                end
                def traverse

                    puts "notice container elements as follows"
                    @container.each {|e| puts e}
                end
            CLASSDEF
            new_cls
        end
    end

    执行结果例如以下:

    c1 = (Factory.build_class "C1", String)
    n = c1.new
    n.append_string("abc") 
    puts n.traverse
    puts ">>>>", n.include_string?

    ("abc")
    puts ">>>.",n.include_string?("123")
    n.delete_string("abc")
    puts n.traverse


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4638698.html
Copyright © 2011-2022 走看看