`
ezzze
  • 浏览: 42582 次
  • 性别: 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

    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模式进行二次开发。本文将深入...

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

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

    清除unity中的meta文件

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

    meta分析软件安装包

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

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

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

    Meta分析 数据提取

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

    MTK meta工具

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

    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)。这些元数据通常不直接对用户可见,但对浏览器以及其他网络服务(如搜索引擎)具有重要...

    Mtk meta ver5.6

    MTK Meta工具是针对MediaTek(MTK)平台开发的一款综合性软件,主要用于基带和射频的校准以及测试工作。这款工具的版本为5.6,它在工程师和开发者中广泛使用,以确保MTK芯片组驱动的设备能够进行高效、精确的硬件...

    header和meta头部信息

    这篇博文链接指向的是一个关于`header`和`meta`头部信息的讨论,虽然具体内容无法直接提供,但从一般意义上,我们可以深入探讨这两个关键元素的作用、用途以及相关知识点。 `&lt;header&gt;` 标签: 1. **定义页面头部**...

    html meta viewport属性说明

    手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤 到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过...

    网页设计中meta详解

    在网页设计中,`&lt;meta&gt;` 标签扮演着至关重要的角色。它是 HTML5 文档类型中的一个元素,用于提供关于文档的各种元信息,这些信息包括网页的字符编码、描述、关键词、重定向、刷新等。`&lt;meta&gt;` 标签通常位于 `&lt;head&gt;`...

Global site tag (gtag.js) - Google Analytics