西安一品家
科技名词定义中文名称:节点 英文名称:node,panel point;pitch point;node 定义1:塔的若干部件的汇合点。 所属学科:电力(一级学科);输电线路(二级学科) 定义2:在一对相啮合的齿轮上,其两节圆的切点。 所属学科:机械工程(一级学科);传动(二级学科);齿轮传动(三级学科) 定义3:在网络拓扑中,网络任何支路的终端或网络中两个或更多支路的互连公共点。 所属学科:通信科技(一级学科);通信原理与基本技术(二级学科)
夏萱萱大人
使用 object CurrentOrigin 为 TreeNodes 提供一个可以查找上下文的地方,比如当前正在解析哪行 code。 object CurrentOrigin 主要包含一个 private val value = new ThreadLocal[Origin]() ,目前 CurrentOrigin 仅在 parser 中使用,在 visit 每个节点的时候都会使用,记录当前 parse 的节点是哪行哪列 另外,从 value 是 ThreadLocal 类型可以看出,在 Spark SQL 中,parse sql 时都是在单独的 thread 里进行的(不同的 sql 不同的 thread) 返回该节点的 seq of children,children 是不可变的。有三种情况: 查找第一个符合 f 条件(比如某个类型的)的 TreeNode,先序遍历。 将函数 f 递归应用于节点及其子节点 与 foreach 不同的是,foreach 先应用于 parent,再应用与 child;而 foreachUp 是先应用于 child 再应用与 parent 调用 foreach,foreach 中应用的函数是 ret += f(_) ,最终返回一个 seq,包含将 f 通过 foreach 方式应用于所有节点并 add 到 ret。其中 f 本身是 BaseType => A 类型 原理与 map 一致,只是 f 变成了 BaseType => TraversableOnce[A] PartialFunction#lift :将 partial func 转换为一个返回 Option 结果的函数。将 pf 函数应用于符合 pf 定义的节点(即 pf.lift(node)返回的 Option 不是 None )并都 add 到 ret = new collection.mutable.ArrayBuffer[B] 以 Seq 形式返回 以 Seq 的形式返回 tree 的所有叶子节点 def collectFirst[B](pf: PartialFunction[BaseType, B]): Option[B] :注意,因为可能没有符合 pf 定义的节点,所有返回的 Option 可能是 None 相当于 productIterator.map(f).toArray ,即对于 productIterator 每个元素执行 f 然后将 ret 组成一个 arr 返回 注意:TreeNode 没有实现 Product 相关方法,都由其子类自行实现 使用 new children 替换并返回该节点的拷贝。该方法会对 productElement 每个元素进行模式匹配,根据节点类型及一定规则进行替换。 调用 transformDown rule: PartialFunction[BaseType, BaseType] 返回 f 应用于所有子节点(非递归,一般将递归操作放在调用该函数的地方)后该节点的 copy。其内部的原理是调用 mapProductIterator,对每一个 productElement(i) 进行各种模式匹配,若能匹配上某个再根据一定规则进行转换,核心匹配转换如下: 以上都是适用于有 children 的 node,如果是 children 为 null 的 node 直接返回 反射生成节点副本 返回该类型 TreeNode 的 name,默认为 class name;注意,会移除物理操作的 Exec$ 前缀 所有应该以该节点内嵌套树表示的 nodes,比如,可以被用来表示 sub-queries (children ++ innerChildren).toSet[TreeNode[_]] 主要用于交互式 debug,返回该 tree 指定下标的节点,num 可以在 numberedTreeString 找到。最终调用的 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:
优质英语培训问答知识库