方法 – 将方法添加到元类

方法 – 将方法添加到元类,第1张

概述我正在玩Groovy中的元编程.但是突然间我面临一些我不能工作的小问题 这是简单的脚本: // define simple closuredef printValueClosure = { println "The value is: '$delegate'"}String.metaClass.printValueClosure = printValueClosure// works 我正在玩Groovy中的元编程.但是突然间我面临一些我不能工作的小问题

这是简单的脚本:

// define simple closuredef printValueClosure = { println "The value is: '$delegate'"}String.MetaClass.printValueClosure = printValueClosure// works fine'variable A'.printValueClosure()// define as methoddef printValueMethod(String s){ println "The value is: '$s'"}// how to do this!?String.MetaClass.printValueMethod = this.&printValueMethod(delegate)'variable B'.printValueMethod()

是否可以使用该方法,但是将第一个参数设置为调用对象?使用委托似乎不工作…不引用调用方的方法的分配没有问题.在这里工作吗

谢谢,
英戈

解决方法 完成此 *** 作的最简单方法是将方法包装在闭包中,如下所示:

def printValueMethod(String s){    println "The value is: '$s'"}String.MetaClass.printValueMethod = { -> printValueMethod(delegate) }assert 'variable B'.printValueMethod() == "The value is: 'variable B'"

添加方法而不使用闭包的一种方法就是创建一个类别类并将其混合成如下:

class PrintValueMethodcategory {    static def printValueMethod(String s) {        println "The value is: '$s'"    }}String.MetaClass.mixin(PrintValueMethodcategory)assert 'variable B'.printValueMethod() == "The value is: 'variable B'"

在这种特殊情况下,我不认为currying可以帮助,因为在分配给元类时,你不知道代表的价值.

总结

以上是内存溢出为你收集整理的方法 – 将方法添加到元类全部内容,希望文章能够帮你解决方法 – 将方法添加到元类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存