元编程(鼻祖是Lisp)一直在语法上和书写上特立独行,其功能也和一般的函数不一样,与从不同。
这个你需要去体会。比如反射。

有人喜欢“用程序生成程序”等描述。

比如,没有事先定义一个类或函数,但是可以根据客户输入的信息,动态生成相应的类或函数。这个有点象C++的“模版”。

比如,你输入参数input =[“name”,“book”,“price”,“publish date”,…],可以生成一个新的类。但是,在此前,模版并不知道“输入”什么内容。

函数也是一样的,我们一般情况下,函数是要先写好,再调用的。元编程则具备这种能力,也许是你输入什么名字符串,就生成什么样的函数签名。

元编程的本质是代码“书写”代码的能力。

元编程与宏

宏也是一种特殊的函数,Julia的宏会在函数签名前面加一个“@”,rust则不同,会在函数签名后加一个“!”。
宏也有这样“操作代码”的神奇能力。

大家最熟悉@time

macro time(ex)return quotelocal t0 = time()local val = $ex   # 一段代码local t1 = time()println("elapsed time: ", t1-t0, " seconds")valend
end

进一步阅读:

https://github.com/thautwarm/MLStyle.jl

https://github.com/MikeInnes/MacroTools.jl

Julia :元编程、宏相关推荐

  1. java元编程_一文读懂元编程

    元编程(Metaprogramming)是编写.操纵程序的程序,简而言之即为用代码生成代码.元编程是一种编程范式,在传统的编程范式中,程序运行是动态的,但程序本身是静态的.在元编程中,两者都是动态的[ ...

  2. 使用基于Boost的预处理器元编程实现变长类型列表的参数化

    最近的工作中有这样一个需求: 使用宏自动生成类成员函数的声明和实现代码,成员函数的返回值类型不定,参数表可能为空,也可能有任意个任意类型的参数,例如: //函数名:foo0.返回值:int.参数类型表 ...

  3. Elixir元编程-第四章 如何测试宏

    Elixir元编程-第四章 如何测试宏 任何设计良好的程序库背后必定有套完善的测试程序.你已经编写扩充了一些语言特性,也许也编写了一些重要的应用程序.你也见识过了通过宏来编写友好的测试框架.这里还有些 ...

  4. 周末话题-元编程(metaprogramming)

    在计算机行业永远不缺乏的是什么? 概念和新名词 我们已经见了太多太多的名词,现在都有点名词麻痹症了.就在这些名词中间有一个单词忽隐忽现的闪烁着自己的光芒----meta. 在牛津大辞典里对meta这样 ...

  5. 编程实现算术表达式求值_用魔法打败魔法:C++模板元编程实现的scheme元循环求值器...

    本文使用 Zhihu On VSCode 创作并发布 [TOC] 前言 寒假时沉迷C++模板元编程,写了个简单的Scheme元循环求值器.可以用类似Scheme的语法写出这样的C++模板代码: _&l ...

  6. 引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针

     1.引用内部函数绑定机制 #include<iostream> #include<functional> usingnamespacestd; usingnamespac ...

  7. C++模板元编程 入门简介

    最近一直在看STL和Boost,源码里边好多涉及到模板元编程技术,简单了解一下,备忘(Boost Python中的涉及模板元的部分重点关注一下). 范例引入 // 主模板 template<in ...

  8. C++11模版元编程的应用

    1.概述 关于C++11模板元的基本用法和常用技巧,我在程序员2015年2月B<C++11模版元编程>一文(后称前文)中已经做了详细地介绍,那么C++11模版元编程用来解决什么实际问题呢, ...

  9. 编程界的“二向箔”——Dart元编程

    阅读过<三体>的同学肯定知道"降维打击",从更高维度看问题,直接将对手KO.今天我们闲聊一下编程界的"二向箔"--元编程. 1. 什么是元编程 我们 ...

  10. 从 C++98 到 C++17,元编程是如何演进的? | 技术头条

    作者 | 祁宇 责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 不断出现的C++新的标准,正在改变元编程的编程思想,新的idea和方法不断涌现,让元编程变得越来越简单,让C++变得简单也 ...

最新文章

  1. log file switch (checkpoint incomplete)
  2. 使用vue的transition完成滑动过渡
  3. Hadoop vs Spark
  4. OpenCV HDF创建,写入和读取数据集
  5. 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
  6. leetcode256. 粉刷房子
  7. oracle12c磁带恢复,第12章 备份与恢复
  8. 数据结构C语言实现动态顺序表
  9. Flex App的Size和Link报告
  10. 前端白屏问题_记一次白屏统计与修理
  11. IPv6 SLAAC原理详解及配置
  12. 你可能不知道的CSS3属性: object-fit,object-position的妙用
  13. labview连接周立功的USB转CAN(一)
  14. javaweb网上商城系统
  15. marker 上的气泡 callout属性设置无效
  16. Spring 的第一个Hello Spring
  17. 计算机编码种类(ASCII/gbk/unicode/utf-8)
  18. 红外平行光管ZEMAX光学设计/SOLIDWORKS
  19. 2019年第十届山东省acm省赛总结
  20. 基于51单片机的扫地小车,扫地机器人设计 主要功能有寻迹避障,来回清扫功能,往返清扫功能

热门文章

  1. System Center 2016组件将发生什么变化?
  2. Iframe跳转问题
  3. hdu 5178 pairs (线性探查问题)
  4. Juniper MIP
  5. 如何修改MyEclipse的默认工作路径Workplace
  6. 在VMWare中配置SQLServer2005日志传送 Step by Step(二)——配置和测试
  7. Js参数RSA加密传输,jsencrypt.js的使用
  8. Ubuntu下对executable (application/x-executable)文件创建快捷方式
  9. java踩坑记-getResourceAsStream
  10. 报表软件FineReport如何连接SAP HANA