• 2024-06-30IPython的%macro魔法命令:自动化和重用代码的利器
    IPython是一个强大的交互式Python解释器,它提供了许多增强功能来提升开发效率,其中之一就是魔法命令(magiccommands)。魔法命令以%开头,用于执行特定的操作,如控制IPython的行为或执行特殊的代码转换。%macro是IPython中一个非常有用的魔法命令,它允许用户定义和存储一段代码,以便
  • 2024-06-08Rust基础学习-Rust宏
    Rust中的宏是生成另一段代码的一段代码。可以根据输入生成代码,简化重复模式,使得代码更加简洁。比如我们一直在用的println!,vec!,panic!都是宏。创建宏可以使用macro_rules!创建一个宏:macro_rules!macro_name{(...)=>{...}}这里的()=>{}是宏规则条目,我
  • 2024-06-02dbt adapter dispatch 处理简单说明
    以前是结合使用对于adapter的dispatch有过简单说明,以下结合源码分析下内部参考处理参考处理defdispatch(self,macro_name:str,macro_namespace:Optional[str]=None,packages:Optional[List[str]]=None,#eventuallyremove
  • 2024-05-10dbt macro 中获取relation 的几种方法
    很多时候我们是希望在自己开发的macro中引用relation这样可以获取实际模型在数据库中的信息,方便数据的写入,或者进行查询实现动态能力,尤其在进行数据质量方便的处理时候,以下简单说明下一些可选的方法参考方法直接使用api.Relation.create创建新的如果知道一些信息(database
  • 2024-05-01dbt 自定义AdapterPlugin 中dependencies 简单说明
    结合dbt-redshift的对于dependencies部分的定义以及使用简单说明下参考代码Plugin:AdapterPlugin=AdapterPlugin(adapter=RedshiftAdapter,#type:ignorecredentials=RedshiftCredentials,include_path=redshift.PACKAGE_PATH,dep
  • 2024-04-26error: possibly undefined macro: AC_CHECK_HEADERS
    Hi,Ihavebeengettingthebelowerrorafterrunning./bootstrap:autoreconf:running:/usr/bin/autoconf--force--warnings=allconfigure.ac:133:error:possiblyundefinedmacro:AC_CHECK_HEADERSIfthistokenandothersarelegitimate,pleaseusem4_pat
  • 2024-04-21dbt 使用adapter.dispatch 进行macro 的覆盖处理
    adapter.dispatch是一个很方便的功能,可以实现方法的重载,对于不同环境可以使用不同的macro,以下是一个简单示例macro定义appdemo.sql注意在macros目录下,当然可以修改{%macrodemo(name,age)%}#注意此处我没有指定,namespace或者package,对于package开
  • 2024-04-15过程宏(proc-macro)
    优点增加代码的复用。性能。因为是在编译时生成,所以会得到更好的性能。没测试过,有待商榷过程宏的分类proc-macroproc-macro-deriveproc-macro-attribute构建过程宏的必要设置构建过程宏,要在cargo.toml里面设置一些参数,这是必须的。一般来说,过程宏必须是一个库,或者作为
  • 2024-04-12Rust 的声明宏机制
    背景Rust宏编程是这门语言比较有趣但又难以掌握的知识点,而且在大多数项目中使用频度并不算高。本文尝试性地总结Rust声明宏的原理和使用,目的是为了能更好地看懂一些项目中macro_rules!的逻辑。所谓宏编程,我理解本质上就是元编程(据说最早源自LISP的「CodeisData,Datai
  • 2024-04-08(译) 理解 Elixir 中的宏 Macro, 第六部分:原地代码生成
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div
  • 2024-04-08(译) 理解 Elixir 中的宏 Macro, 第五部分:组装 AST
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div
  • 2024-04-05rust 面向对象编程特性、模式与模式匹配、高级特征
    面向对象编程OOP学习了结构体、枚举,它们可以包含自定义数据字段,也可以定义内部方法,它们提供了与对象相同的功能。面向对象的四大特征:封装、继承、多态通过pub标记为公有的结构体,在其他模块中可以访问使用这个结构体。但是对于结构体内部字段,如果不用pub,则仍是私有的,则可以通过
  • 2024-04-05dbt debug macro 简单说明
    dbt支持debugmacro可以用来进行调试使用{%macromy_macro()%} {%setsomething_complex=my_complicated_macro()%} {{debug()}} {%endmacro%}参考实现实际上就是通过环境变量开启了一个debug上下文变量ifos.en
  • 2024-04-04Macros --The Magic Wand of Rust
    HelloandwelcometothewonderfulworldofRustmacros!Today,wewillembarkonanexcitingadventuretogethertoexplorethemagicalpowersofRustmacros.Areyouready?Bringyourcuriosityandlet'sgo!InRust,macrosarelikewizardsofprogr
  • 2024-04-04dbt statement macro 简单说明
    statementblocks实际上就是一个标准的jinja2macro调用包装,提供了方便的sql执行能力,因为需要进行查询结果的存储,dbt提供了一个store_result的macro,内部数据的处理基于了agate这个方便的python数据处理包为了查询使用提供了load_resultmacro以下只说明关于stateme
  • 2024-04-03(译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div
  • 2024-04-03(译) 理解 Elixir 中的宏 Macro, 第三部分:深入理解 AST
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div
  • 2024-04-01(译) 理解 Elixir 中的宏 Macro, 第二部分:宏理论
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MicroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div
  • 2024-04-01dbt macro 的执行简单说明
    BaseAdapter中包含了一个adapter实际运行依赖的转换,链接处理,当然也包含了macro的执行,具体方法有直接的execute_macroModelRunner中的materialization_macro(run命令)还有run-operation中RunOperationTask的_run_unsafe方法ModelRunnercall_macro处理参考调用
  • 2024-03-31dbt this macro 处理简单说明
    dbtthismacro提供了一种方便的对于当前模型展现的方法,可以使用在增量模型以及pre&posthooks中this实际是就类似ref('<the_current_model>')是一个relation包含了database,schema以及模型标识使用示例一个增量处理的,基于this可以方便的引用模型{{config(mater
  • 2024-03-26dbt return macro 内部实现简单说明
    jinja2默认是没有returnmacro的,dbt在实现的时候比较有意思,通过一个exception触发的,以下是简单说明参考使用一个包含return的macro{%macrodemoapp(name,version)%}{%ifversion=='v1'%}{{return("appdemo")}}{%else%}
  • 2024-03-26jinja2 通过Template. make_module 进行动态macro 创建以及macro 方法调用
    实际属于一个小技巧,可以实现比较灵活的jinja2扩展,是从dbt对于macro的处理部分学习到的参考代码app.pyfromjinja2importEnvironment env=Environment() #定义macro的内容macro_template="""{%macromydemo(name,age)-%}{{name
  • 2024-02-27[Rust] Write macro
    Defineamacroanduseit:macro_rules!my_macro{()=>{println!("Checkoutmymacro!");};}fnmain(){my_macro!();} Noticethatyouhavetimedefine macrobeforemainfunction.Otherwiseitdoesn'twork. E
  • 2024-02-15[Rust] Macros vs. Functions
    InRust,theexclamationmark(!)afteranameindicatesthatitisamacroratherthanafunction.MacrosandfunctionsinRustarecalleddifferentlyandservedifferentpurposes.Macros,likeanyhow!,candothingsthatfunctionscannot,suchasgenera
  • 2024-02-01C/C++ 中的宏/Macro
       宏(Macro)本质上就是代码片段,通过别名来使用。在编译前的预处理中,宏会被替换为真实所指代的代码片段,即下图中Preprocessor处理的部分。C/C++代码编译过程-图片来自 ntu.edu.sg根据用法的不同,分两种,Object-like和Function-like。前者用于Object对象,后者