当前位置: 首页 > news >正文

燕郊网站开发wordpress 排版

燕郊网站开发,wordpress 排版,花钱人做的网站做好后算谁的,网站开发多少钱一个月文章目录 背景示例代码分析灵活性双重分派 总结 背景 很多项目代码有accept()用法#xff0c;在calcite 里也看到了这种#xff0c;深入了解一下 语法树遍历#xff1a;编译器通常会将源代码解析成抽象语法树#xff08;AST#xff09;。为了实现不同的编译阶段#xff… 文章目录 背景示例代码分析灵活性双重分派 总结 背景 很多项目代码有accept()用法在calcite 里也看到了这种深入了解一下 语法树遍历编译器通常会将源代码解析成抽象语法树AST。为了实现不同的编译阶段如语法分析、类型检查、代码生成等访问者模式非常有用。每个阶段可以有自己的访问者类而无需修改语法树的结构。 例子一个编译器可以有 TypeCheckVisitor 用于类型检查CodeGenVisitor 用于生成目标代码。 示例代码 RexNode 接口的源码有accept方法 public abstract class RexNode {/*** Accepts a visitor, dispatching to the right overloaded* {link RexVisitor#visitInputRef visitXxx} method.** pAlso see {link RexUtil#apply(RexVisitor, java.util.List, RexNode)},* which applies a visitor to several expressions simultaneously.*/public abstract R R accept(RexVisitorR visitor); }定义一个visitor类 package com.demo;import org.apache.calcite.rex.*;public class CustomRexVisitor extends RexVisitorImplVoid {public CustomRexVisitor() {super(true); // true 表示遍历整个树}Overridepublic Void visitInputRef(RexInputRef inputRef) {System.out.println(Visiting input reference: inputRef.getIndex());return null;}Overridepublic Void visitLiteral(RexLiteral literal) {System.out.println(Visiting literal: literal.getValue3());return null;}Overridepublic Void visitCall(RexCall call) {System.out.println(Visiting call: call.getOperator().getName());// 继续遍历子表达式for (RexNode operand : call.getOperands()) {operand.accept(this);}return null;}// 可以重写更多的方法来处理其他类型的节点 }定义 import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rel.type.RelDataTypeSystemImpl; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexInputRef; import org.apache.calcite.rex.RexLiteral; import org.apache.calcite.rex.RexNode; import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.type.SqlTypeFactoryImpl; import org.apache.calcite.sql.type.SqlTypeName;public class RexVisitorExample {public static void main(String[] args) {// 创建类型工厂RelDataTypeFactory typeFactory new SqlTypeFactoryImpl(new RelDataTypeSystemImpl() { });// 创建字段类型和字面量类型RelDataType intType typeFactory.createSqlType(SqlTypeName.INTEGER);// 创建字段引用和字面量RexBuilder rexBuilder new RexBuilder(typeFactory);RexInputRef fieldRef rexBuilder.makeInputRef(intType, 0); // 对应字段aRexLiteral literal rexBuilder.makeLiteral(10, intType);// 创建加法运算表达式RexNode expression rexBuilder.makeCall(SqlStdOperatorTable.PLUS, fieldRef, literal);// 使用自定义访问者遍历表达式树CustomRexVisitor visitor new CustomRexVisitor();expression.accept(visitor);} }分析 RexNode 有很多种实现实际上就是打印出来就是一颗语法树然把在visit 接口类增加对每种数据结构的访问方法把要实现的具体操作放到visitor 实现类去达到数据结构和操作之间的解偶。 灵活性 访问者模式的核心思想是通过将操作封装在访问者中使得可以在不修改数据结构的情况下添加新的操作。这一点通过 accept 方法得以实现。 expression.accept(visitor) 这一调用让表达式树的节点来“接受”一个访问者对象实际上是节点把自己传递给访问者由访问者来决定如何处理这个节点。 这意味着访问策略是动态决定的具体的操作逻辑不再由节点自己决定而是由传入的访问者对象决定。 双重分派 这个设计背后的一个重要概念是双重分派Double Dispatch。 单分派在普通方法调用中调用方法的对象类型决定了调用哪个方法这是一次分派。 双重分派在访问者模式中accept 方法的调用对象即节点和传入的访问者对象的类型共同决定了最终调用的具体方法。这就是两次分派或者说双重分派。 在 expression.accept(visitor) 这行代码中 第一次分派调用节点的 accept 方法时由表达式树中的具体节点类型如 RexLiteral 或 RexCall决定。 第二次分派节点将自己传递给访问者访问者根据节点的具体类型如 RexLiteral、RexCall 等选择对应的处理方法如 visitLiteral、visitCall。 这意味着操作逻辑不仅依赖于节点的类型还依赖于传入访问者的类型和访问者的逻辑从而实现灵活且可扩展的处理方式。 总结 访问者模式和类似的策略模式在面对需要对对象结构进行多种操作时非常有用。它们帮助你在不修改对象结构的情况下增加新的操作逻辑使代码更容易维护和扩展。这些模式特别适用于那些操作复杂、多变、且具有层次结构的数据结构的场景。
http://www.hkea.cn/news/14559406/

相关文章:

  • 网站建设定制网站建设公司哪家好商城网站建站方案
  • 郑州制作网站设计网站工作沟通及建设
  • 杭州做网站企业中信建设有限责任公司深圳中信金融中心项目工期专业招标
  • 建网站上海营销推广渠道有哪些
  • 自己做网站怎么做wordpress进行分类目录搜索
  • 重庆营销网站建设公司排名电影网-个人网站建设论文
  • 品牌网站建设优化公司怎么建立一个网站卖东西
  • 北京个人网站制作小程序开发平台排行
  • wordpress成品网站免费芯片最新消息
  • 晋城网站制作公司好用的crm系统有哪些
  • 宁波公司网站建立西安网络优化哪家好
  • 网站开发用什么语言最多系统花钱做任务的小说魅网站
  • 网站的运营模式门户网站 需求
  • 海城百度公司 海城网站建设广东深圳房价
  • 做网站负责人有法律风险吗新共享项目加盟代理
  • 网站的跟目录淘客 wordpress 数据
  • 网站备案号在哪作风建设提升年活动网站
  • 池州网站建设兼职设计网装修
  • 如何建设一个简单的公司网站jsp可以做网站吗
  • 平面设计好的网站wordpress 删除 分类存档
  • .net网站开发书如何建设百度网站
  • 坪山网站建设多少钱百度帐号登录
  • 河南平台网站建设制作网站登录界面模板html
  • 静安做网站公司wordpress春菜
  • 网站跳出率高精品课程网站设计报告
  • wordpress媒体库播放器seo需要会什么
  • 网站的三种基本类型网上银行入口
  • 网站建设的展望 视频化妆品网站设计模板
  • 沈阳市做网站电话网站建设欧美
  • 深度网营销型网站建设公司怎么样梁山专做网站的公司