访客模式:遍历客户端或访客中的树元素

2023-12-31

早上好,stackoverflow,

我目前正在 AST 之类的东西上实现访问者模式。 现在我的问题是,如何迭代元素?

我认为将对象返回给访问者并让访问者从那里开始遍历更符合逻辑。因为当您想以不同的方式遍历对象时,您可以保持灵活性。

另一方面,人们可以说,访问者不应该关心对象的结构。因此,如果对象发生变化,您不必也更改访问者。

有没有一般建议如何解决这个问题?我有两本关于访问者模式的书,但这两本书都没有讨论如何处理更复杂的节点的问题。

问候 脚趾


对于树结构来说,这似乎非常简单。这accept节点中的方法可能如下所示:

void accept(Visitor visitor) {
    visitor.visitMyTypeOfNode(this);
    for each child {
        child.accept(visitor);
    }
}

显然,您需要考虑这对于应用程序的整体架构是否有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访客模式:遍历客户端或访客中的树元素 的相关文章

  • 源代码不可用时的访问者模式实现

    考虑的原因之一访客模式 这种分离的实际结果是能够向现有对象结构添加新操作 而无需修改这些结构 假设您没有第三方库的源代码 并且您已经添加了对相关对象的一项操作 由于您没有对象 因此无法修改您的元素 第三方类 来添加访问者 在这种情况下 双重
  • 访客模式的目的与示例[重复]

    这个问题在这里已经有答案了 我对访问者模式及其用途感到非常困惑 我似乎无法真正想象出使用这种模式的好处或其目的 如果有人可以用示例来解释 如果可能的话 那就太好了 因此 您可能已经阅读了无数种关于访问者模式的不同解释 并且您可能仍然会说 但
  • boost::any 的访问者模式

    我找到了这个https gist github com 2945472但我需要一个不依赖于 c 11 的实现 我尝试将其转换为仅使用升压 但遇到了一些麻烦 这是我想出的 include
  • 实施访客计数器

    我是一个新手 正在使用 ASP Net 2 0 和 C 2005 开发一个网站 我想添加一个工具来计算数量 我网站的访问者数量 我已经收集了使用 Global asax 添加此功能的基本信息 我通过在 system web 部分下添加行 对
  • 如何在访问期间知道ANTLR解析器当前处于哪个替代规则

    如果我们查看 bash 源代码 特别是 yacc 语法 我们可以看到所有重定向都是这样定义的 redirection GREATER WORD LESS WORD NUMBER GREATER WORD NUMBER LESS WORD R
  • 从范围“”引用了“SubType”类型的变量“x.Sub”,但未定义错误

    检查这个小提琴是否有错误 https dotnetfiddle net tlz4Qg 我有两个这样的课程 public class ParentType private ParentType public int Id get protec
  • Symfony:如何使 JMS 序列化器适用于严格类型?

    这是我的情况 我正在尝试编写一个适用于 严格 类型 整数 布尔值和浮点数 的 Symfony REST API 因为默认的 Symfony 行为不支持它 并且我想避免强制转换类型 例如 JMS Serializer 将字符串值转换为整数字段
  • 访客模式:遍历客户端或访客中的树元素

    早上好 stackoverflow 我目前正在 AST 之类的东西上实现访问者模式 现在我的问题是 如何迭代元素 我认为将对象返回给访问者并让访问者从那里开始遍历更符合逻辑 因为当您想以不同的方式遍历对象时 您可以保持灵活性 另一方面 人们
  • 使用 ANTLR 构建自己的 C# 编译器:编译单元

    Create a scanner that reads from the input stream passed to us CSLexer lexer new CSLexer new ANTLRFileStream f tokens To
  • 使用标准变体和访客模式时无用户定义的转换

    您能否帮我弄清楚为什么这不起作用 即参考代码中的注释 I need to do this but I can t I thought this the goal 我不知道为什么这不起作用 它的灵感来自我在网上看到的例子 include
  • async/await 和访问者模式[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我们最近将对象树状结构 大约 40 层深 的访问者之一转换为 async await 模式 因为最里面的接受方法现在执行
  • C++ 参数包,仅限于具有单一类型的实例?

    从 C 11 开始 我们可以创建可以接受任何参数序列的模板函数 template
  • 访客模式中的泛型杀伤力过大

    我正在开发一个项目 将十年前编写的旧 java 1 2 代码转换为 java 7 该项目大量 过度 使用特定访问者 为了使事情在概念上简单 我们假设访问者是这样的 public interface RobotVisitor public O
  • C++ 访问者模式:为什么每个派生的访问者都应该实现 Accept()?

    我见过几个演示访问者模式的示例 在所有这些中 每个派生的访问元素都实现通常称为 Accept 方法 在颜色层次结构中 此方法可能如下所示 void Red accept Visitor v v gt visit this void Blue
  • 访问者模式对于动态类型语言有用吗?

    访问者模式允许在不扩展对象类的情况下编写对对象的操作 当然 但为什么不直接编写一个全局函数或静态类来从外部操作我的对象集合呢 基本上 在像 java 这样的语言中 accept 出于技术原因需要方法 但在一种语言中我可以实现相同的设计而无需
  • 访问者模式 VS 迭代器模式:跨层次结构类访问?

    我正在研究访客模式的优点 并引用设计模式 http it wikipedia org wiki Design Patterns 但是迭代器不能跨具有不同结构的对象工作 元素类型 例如 页面上定义的 Iterator 接口 295 只能访问I
  • 使用 Java 通过访问者模式从 AST 构建控制流图

    我试图弄清楚如何实现我的 LEParserCfgVisitor 类 以便从已使用 JavaCC 生成的抽象语法树构建控制流图 我知道已经存在一些工具 但我正在尝试这样做 为我的编译器期末考试做准备 我知道我需要一个将图形保存在内存中的数据结
  • Delphi Enterprise:如何在没有循环引用的情况下应用访问者模式?

    使用 Delphi 2009 Enterprise 我在模型视图中为 GoF 访问者模式创建了代码 并将代码分为两个单元 一个用于域模型类 一个用于访问者 因为我可能需要其他单元来实现不同的访问者实现 所有内容都在一个单位 大泥球 http
  • 策略模式和访客模式有什么区别?

    我很难理解这两种设计模式 您能否给我上下文信息或示例 以便我可以得到清晰的想法并能够映射两者之间的差异 Thanks The 策略模式就像一个1 many关系 当存在一种类型的对象并且我想对其应用多个操作时 我使用策略模式 例如 如果我有一
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于

随机推荐

  • 如何有效地从 std::set 中选择随机元素

    如何有效地从一个随机元素中选择一个std set A std set iterator is 不是随机访问迭代器 所以我不能像为一个随机选择的元素那样直接索引std deque or std vector I could获取从返回的迭代器s
  • 表达式 lambda 和语句 lambda 之间的区别

    表达式 lambda 和语句 lambda 之间有区别吗 如果是这样 有什么区别 在下面的链接中找到了这个问题 但无法理解答案 什么是 Lambda 表达式 C 面试题 http csharpinterviewfaq blogspot in
  • MFMailComposeViewController 未从视图中消失

    我有以下代码 当调用操作表上的按钮时会调用该代码 但是 当我按取消 然后删除草稿时 它只是收费并且不会关闭 我在应用程序的其他地方使用相同的代码 并从选择的表格视图单元格中调用它 并且它可以在那里找到 有什么想法为什么它在这里不起作用吗 当
  • 当变量超出范围时是否意味着它不存在?

    我不确定我是否理解作用域 超出作用域的变量 我正在使用 Ruby 是否存在于内存中的某处 或者它是否停止存在 我知道你无法访问它 说超出范围的变量不再存在是不准确的吗 也许这是一个哲学问题 如果您使用托管语言 那么您不会分配和取消分配内存
  • Google Oauth2 userinfo API 不返回用户名数据

    在过去的几个月里 我一直在使用 OAuth 登录后使用此 url 来检索用户的名称和信息 https www googleapis com oauth2 v1 userinfo alt json 这给了我以下格式的 JSON id 1234
  • openGL以伪3D视角绘制扭曲的精灵(图像)

    好吧 这将是一个很难解释的事情 我正在使用 AndEngine 我认为是 openGL 为 Android 制作一个非常基本的 伪 3d 赛车游戏 我不相信使用 AndEngine 真的与这个问题有任何关系 因为我直接访问 openGL 函
  • UILocalizedIndexedCollat​​ion 仅返回英文排序规则

    我正在尝试使用以下方法获取像联系人这样的本地化索引UILocalizedIndexedCollation 在 通讯录 中 当我更改语言时 索引会更改以匹配语言 然而sectionIndexTitles始终返回英文索引 我已经用我创建的演示应
  • ValueError:“10.0.0.0/24”似乎不是 IPv4 或 IPv6 网络

    我想在 Python 中使用 IP 子网 IP 地址 我使用以下命令创建了 Python 代码ipaddress模块 当我在 pycharm IDE 中运行代码时 它工作正常 但是当我在命令提示符下键入时运行python test py 它
  • 如何使用 BEM 正确设置元素的范围?

    给定以下 BEM 树结构 其中存在五个嵌套级别 collection main features top story byline author 根据 BEM 的命名约定 其中一个元素是块的一部分 并且在它所属的块之外没有任何意义 命名该元
  • 什么是“别名”流缓冲区?

    什么是 别名流缓冲区 我在评论中遇到了这个词answer https stackoverflow com questions 3318714 check if ostream object is cout or ofstream c 331
  • 在后台接收 UIPasteboard (generalPasteboard) 通知

    有办法做到这一点吗 我注册我的对象UIPasteboardChangedNotification在启动时 但是当将其发送到后台并打开 例如 Safari 并复制一些文本时 我的处理程序永远不会被调用 我现在只使用模拟器 我都用过 NSNot
  • 自定义开关按钮动画

    我用的是定制的开关按钮 in the 自定义开关按钮 https stackoverflow com questions 30593193 creating sliding on off switch button in javafx an
  • Flexbox 项目之间的间距

    这就是我要的 但这是我最接近的 body margin 0 padding 0 border 1px solid red flex display ms flexbox display webkit box display webkit f
  • 如何在 flink 独立安装上进行 kerberos 身份验证?

    我有一个独立的 Flink 安装 我想在其上运行一个将数据写入 HDFS 安装的流作业 HDFS 安装是 Cloudera 部署的一部分 需要 Kerberos 身份验证才能读取和写入 HDFS 由于我没有找到有关如何使 Flink 与受
  • GLES20Canvas.nDrawDisplayList 很慢

    我有一个正在尝试显示的自定义视图 但是我看到它上面有一堆抖动 一切都滚动缓慢 并且响应速度不及应有的水平 我使用了traceview并看到了 GLES20Canvas nDrawDisplayList 似乎要花很多时间来执行 有什么帮助吗
  • Javascript 中如何检测对象是否已被垃圾回收?

    我正在构建一个 JavaScript 游戏 它创建一个Level使用 var 的对象 function start var myGameLevel new Level 2 This Levelobject 有很多功能 主要是向 DOM 添加
  • C++ 函数模板,未定义的架构符号[重复]

    这个问题在这里已经有答案了 有人可以向我解释为什么以下内容无法编译吗 希望我错过了明显的事情 函数 hpp template
  • 防止 Sympy 重新排列方程

    也许我忽略了显而易见的事情 但是如何防止 sympy 重新排列方程呢 我在 iPython 笔记本中使用 Sympy 因此我可以轻松地将 Latex 代码复制粘贴到 Lyx 但我希望方程的顺序与我定义的顺序相同 例如 灰体辐射与其温度的关系
  • 列出 SQL Server 2012 架构中所有表的名称

    我在 SQL Server 2012 中有一个架构 是否有一个命令可以在 SQL 中运行来获取该架构中由用户填充的所有表的名称 我知道 MySQL 有一个类似的查询SHOW TABLES 但这不适用于 SQL Server 你真的应该使用I
  • 访客模式:遍历客户端或访客中的树元素

    早上好 stackoverflow 我目前正在 AST 之类的东西上实现访问者模式 现在我的问题是 如何迭代元素 我认为将对象返回给访问者并让访问者从那里开始遍历更符合逻辑 因为当您想以不同的方式遍历对象时 您可以保持灵活性 另一方面 人们