Julia :元编程、宏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wowotuo/article/details/85488876

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

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

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

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

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

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

元编程与宏

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

大家最熟悉@time

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

进一步阅读:

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

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

猜你喜欢

转载自blog.csdn.net/wowotuo/article/details/85488876