`
ezzze
  • 浏览: 42983 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【Meta Programming】折腾了半天 就折腾出来这么点东西

阅读更多
一段运行时修改方法的代码......

groovy的meta programming 果然强大..... 好吧 其实是我见识少.....

早就想写一段javascript prototype代码风格的groovy代码了.....

于是折腾了半天就折腾出来这么样的东东.....
class MetaTest{
	def propertyMissing(String name){
		return Proxy(name);
	}
	
	def Proxy(String name){
		println "entering proxy"
		def clazz = Class.forName(name);
		def klazz = clazz.newInstance();
		klazz.metaClass.methods.findAll { it.name == "getTest" }.each {
			op->
			println "entering in method"
			klazz.metaClass."${op.name}" << { String a ->
				a = "call up"
				return a;
			}
		}
		return klazz;
	}
	

	public static void main(String[] args){
		MetaTest t = new MetaTest();
		println (t.MetaFuck.getTest("absc"));
	
	}

}




class MetaFuck {
	
    static public String getTest(String arg){
		return arg;
	}
	
}

分享到:
评论
2 楼 ezzze 2011-05-23  
JohnnyJian 写道
什么叫prototype风格?metaclass本身不是就是prototype风格吗?

groovy:
t.metaClass.getTest = { arg -> arg }
assert t.getText('abc') == 'abc'


javascript:
t.prototype.getTest = function(arg) { return arg };
assert(t.getText('abc') == 'abc')


没错, 我只是分享我的一个使用场景,需要动态的修改某个运行时时才知道的类的方法....、

我也没说只有我下面的代码才是prototype风格的 是吧....

1 楼 JohnnyJian 2011-05-20  
什么叫prototype风格?metaclass本身不是就是prototype风格吗?

groovy:
t.metaClass.getTest = { arg -> arg }
assert t.getText('abc') == 'abc'


javascript:
t.prototype.getTest = function(arg) { return arg };
assert(t.getText('abc') == 'abc')

相关推荐

    meta-programming简介

    元编程(Meta-programming)是一种高级的编程技巧,它允许程序员在编译时进行计算,而不是在运行时。这种技术最初在C++中通过模板元编程(Template Meta-programming)得到广泛的应用,使得C++不仅仅是一种面向对象...

    Meta Programming Ruby

    ### Meta Programming Ruby:深入理解Ruby元编程 #### 核心概念与原理 《Meta Programming Ruby》这本书由Paolo Perrotta编写,旨在帮助读者深入了解Ruby语言的元编程特性及其强大功能。通过本书的学习,读者可以...

    meta-programming-in-elixir.epub

    meta-programming-in-elixir.epub

    诊断性meta分析手把教你做临床Meta分析——诊断试验性Meta-Disc分析.doc

    诊断性meta分析手把教你做临床Meta分析——诊断试验性Meta-Disc分析 诊断性meta分析是Meta分析的一个重要局部,准确诊断性Meta分析是临床治疗的根底。本篇文章将向大家推荐一款专用于诊断性试验的免费Meta分析软件...

    Evolutionary Programming, Genetic Programming

    关键词包括:进化编程(Evolutionary Programming)、遗传编程(Genetic Programming)、函数优化(Function Optimization)、机器学习(Machine Learning)、元学习(Meta-learning)、超启发式算法(Hyper-...

    sp_meta工具

    **SP_META工具详解** 在移动设备的开发和调试过程中,Meta模式扮演着至关重要的角色。MTK(MediaTek)作为全球知名的芯片制造商,为开发者提供了一款名为SP_META的工具,便于进入Meta模式进行二次开发。本文将深入...

    Maui_META使用说明

    Maui_META使用说明 Maui_META是一款功能强大且实用的META工具,提供了多种实用功能,包括RF Tool、NVRAM Editor、Audio Tool、Baseband Tool、MMI data download、Factory Mode、IMEI download、Get version、...

    清除unity中的meta文件

    在这种情况下,"清除unity中的meta文件"就成为一个需要解决的问题。 首先,理解Unity中的.meta文件至关重要。它们是Unity项目结构的一部分,负责记录每个资源的属性,比如纹理的压缩格式、音频文件的播放模式、脚本...

    Nuxt页面自定义meta标签和asyncData异步请求

    一、页面自定义meta标签 可以为每个页面单独设置不同的meta标签 以便于SEO 全局的meta标签在nuxt.config.js文件里配置 而单独的meta标签在组件的内部标签内进行配置即可 值得注意的是:hid属性是页面的唯一标识 若想...

    meta分析软件安装包

    **Meta分析软件安装包** Meta分析是一种统计方法,用于整合多个独立的研究结果,以提高对某一现象或干预效果的理解和估计。在这个压缩包中,包含了两款用于进行Meta分析的常用软件——RevMan和Stata,以及一个...

    R软件单个率meta分析教程

    R软件单个率meta分析教程,介绍在 R 软 件 中 实 现 单 个 率 的 Meta 分析方法 。 方法 在 R 软件中加载 Meta 分析程序包 , 录入 Meta 分析数据,用实例数据进行 Meta 分析。 结果 单个率资料的 Meta 分析要求率的...

    Meta分析 数据提取

    ### Meta分析中的数据提取 #### 一、数据及来源 在进行Meta分析时,数据的来源至关重要。数据主要来源于已发表的研究文献、未发表的研究资料(例如通过联系研究作者获得的个体患者数据,简称IPD),以及其他可靠的...

    MTK meta工具

    MTK Meta工具是一款专为MTK(MediaTek)平台设计的软件工具,它主要用于帮助开发者和用户进入手机或设备的META模式。这个模式是MTK平台的一个特殊调试环境,允许进行高级的系统操作,如写号、刷机、故障排查等。在...

    我的 claseX.meta

    我的 claseX.meta

    meta在stata中的实现

    " Meta 在 Stata 中的实现" Meta 分析是统计学中的一种重要方法,用于对多个研究结果进行综合分析和评估。Stata 是一个功能强大的统计分析软件,具有强大的 Meta 分析功能。本文将讲解 Stata 在 Meta 分析中的应用...

    网状 Meta 分析实用教程(上).rar

    Meta分析分为传统的双端点Meta分析和网状Meta分析。传统的Meta分析通常只比较两种干预措施,而网状Meta分析则能处理多个干预措施间的复杂关系,形成一个"网状"的比较结构。 "1.3 提炼现有课题,做有意义的 Meta ...

    Meta-SR-Pytorch-master_pytorch_meta_

    《PyTorch实现的元学习超分辨率网络Meta-SR》 在深度学习领域,超分辨率(Super Resolution,SR)技术已经成为了图像处理中的一个热点,它致力于将低分辨率(Low-Resolution, LR)图像恢复为高分辨率(High-...

    meta标签中的

    #### 一、Meta标签概述 在HTML文档中,`&lt;meta&gt;`标签被广泛应用于头部(`&lt;head&gt;`部分),主要用于定义页面的元数据(metadata)。这些元数据通常不直接对用户可见,但对浏览器以及其他网络服务(如搜索引擎)具有重要...

    meta-data标签的使用

    在Android开发中,`meta-data`标签是AndroidManifest.xml文件中的一个重要组成部分,它允许开发者在应用的配置中存储额外的数据。这些数据可以是字符串、整数或其他任何可以在XML中表示的类型,通常用来保存第三方库...

    MTK功能手机META工具

    MTK(MediaTek)功能手机META工具是一种专为基于MediaTek芯片组的功能手机设计的调试和软件升级工具。这个工具主要用于手机的RF(Radio Frequency,射频)调校,确保手机无线通信性能的稳定性和效率。在手机制造和...

Global site tag (gtag.js) - Google Analytics