zoukankan      html  css  js  c++  java
  • 元类metaClass

    metaClass 实现动态改变对象的能力,这点特别像python(metaClass),Python中类(不是元类)的概念借鉴于Smalltalk

    groovy demo:

    class Person {
    String name
    }
    // 添加自我介绍的行为
    Person.metaClass.introduce << {println "I'm $name"}
    // 添加性别属性,默认为男(Male)
    Person.metaClass.sex = "Male"
    def person = new Person(name:"山风小子")
    person.introduce()
    println person.sex   


    动态地创建类,python是静态语言吗?

    Groovy是一种基于JVM的敏捷开发语言,动态语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。 Groovy已在WebWork2中的应用。它可以被编译为标准的Java Bytecode。

    原来都属于动态语言。

    动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。

    而静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。(idior不知道这能不能回答你对动态语言多态的疑问^_^)

    这里我需要明确说明一点,那就是,是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起!

    改造一下体现动态:

    class Person {
    String name
    }
    // 添加自我介绍的行为
    Person.metaClass.introduce << {println "I'm $name"}
    // 添加性别属性,默认为男(Male)

    //这样比较体现动态语言的特性
    if()
    { Person.metaClass.sex = "Male" }

    def person = new Person(name:"山风小子") person.introduce() println person.sex


  • 相关阅读:
    (六)Value Function Approximation-LSPI code (5)
    (六)Value Function Approximation-LSPI code (4)
    (六)Value Function Approximation-LSPI code (3)
    (六)Value Function Approximation-LSPI code (2)
    RSA1 密码学writeup
    攻防世界RE 2.666
    攻防世界RE 1.IgniteMe
    {DARK CTF }Misc/QuickFix
    {DARK CTF }forensics/AW
    攻防世界新手RE 12.maze
  • 原文地址:https://www.cnblogs.com/viewcozy/p/4815520.html
Copyright © 2011-2022 走看看