Julia :元编程、宏
元编程(鼻祖是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 :元编程、宏相关推荐
- java元编程_一文读懂元编程
元编程(Metaprogramming)是编写.操纵程序的程序,简而言之即为用代码生成代码.元编程是一种编程范式,在传统的编程范式中,程序运行是动态的,但程序本身是静态的.在元编程中,两者都是动态的[ ...
- 使用基于Boost的预处理器元编程实现变长类型列表的参数化
最近的工作中有这样一个需求: 使用宏自动生成类成员函数的声明和实现代码,成员函数的返回值类型不定,参数表可能为空,也可能有任意个任意类型的参数,例如: //函数名:foo0.返回值:int.参数类型表 ...
- Elixir元编程-第四章 如何测试宏
Elixir元编程-第四章 如何测试宏 任何设计良好的程序库背后必定有套完善的测试程序.你已经编写扩充了一些语言特性,也许也编写了一些重要的应用程序.你也见识过了通过宏来编写友好的测试框架.这里还有些 ...
- 周末话题-元编程(metaprogramming)
在计算机行业永远不缺乏的是什么? 概念和新名词 我们已经见了太多太多的名词,现在都有点名词麻痹症了.就在这些名词中间有一个单词忽隐忽现的闪烁着自己的光芒----meta. 在牛津大辞典里对meta这样 ...
- 编程实现算术表达式求值_用魔法打败魔法:C++模板元编程实现的scheme元循环求值器...
本文使用 Zhihu On VSCode 创作并发布 [TOC] 前言 寒假时沉迷C++模板元编程,写了个简单的Scheme元循环求值器.可以用类似Scheme的语法写出这样的C++模板代码: _&l ...
- 引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针
1.引用内部函数绑定机制 #include<iostream> #include<functional> usingnamespacestd; usingnamespac ...
- C++模板元编程 入门简介
最近一直在看STL和Boost,源码里边好多涉及到模板元编程技术,简单了解一下,备忘(Boost Python中的涉及模板元的部分重点关注一下). 范例引入 // 主模板 template<in ...
- C++11模版元编程的应用
1.概述 关于C++11模板元的基本用法和常用技巧,我在程序员2015年2月B<C++11模版元编程>一文(后称前文)中已经做了详细地介绍,那么C++11模版元编程用来解决什么实际问题呢, ...
- 编程界的“二向箔”——Dart元编程
阅读过<三体>的同学肯定知道"降维打击",从更高维度看问题,直接将对手KO.今天我们闲聊一下编程界的"二向箔"--元编程. 1. 什么是元编程 我们 ...
- 从 C++98 到 C++17,元编程是如何演进的? | 技术头条
作者 | 祁宇 责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 不断出现的C++新的标准,正在改变元编程的编程思想,新的idea和方法不断涌现,让元编程变得越来越简单,让C++变得简单也 ...
最新文章
- log file switch (checkpoint incomplete)
- 使用vue的transition完成滑动过渡
- Hadoop vs Spark
- OpenCV HDF创建,写入和读取数据集
- 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
- leetcode256. 粉刷房子
- oracle12c磁带恢复,第12章 备份与恢复
- 数据结构C语言实现动态顺序表
- Flex App的Size和Link报告
- 前端白屏问题_记一次白屏统计与修理
- IPv6 SLAAC原理详解及配置
- 你可能不知道的CSS3属性: object-fit,object-position的妙用
- labview连接周立功的USB转CAN(一)
- javaweb网上商城系统
- marker 上的气泡 callout属性设置无效
- Spring 的第一个Hello Spring
- 计算机编码种类(ASCII/gbk/unicode/utf-8)
- 红外平行光管ZEMAX光学设计/SOLIDWORKS
- 2019年第十届山东省acm省赛总结
- 基于51单片机的扫地小车,扫地机器人设计 主要功能有寻迹避障,来回清扫功能,往返清扫功能
热门文章
- System Center 2016组件将发生什么变化?
- Iframe跳转问题
- hdu 5178 pairs (线性探查问题)
- Juniper MIP
- 如何修改MyEclipse的默认工作路径Workplace
- 在VMWare中配置SQLServer2005日志传送 Step by Step(二)——配置和测试
- Js参数RSA加密传输,jsencrypt.js的使用
- Ubuntu下对executable (application/x-executable)文件创建快捷方式
- java踩坑记-getResourceAsStream
- 报表软件FineReport如何连接SAP HANA