Gremlin控制台赋值后无法访问变量?求问其运行机制原因
Gremlin控制台变量无法直接访问的原因及解决办法
为什么会报错?
Gremlin控制台默认将每一行输入作为独立脚本执行,每一行脚本都运行在单独的类上下文(比如报错里的Script98就是当前行对应的脚本类)。第一行里赋值的a是那一行脚本的局部变量,当你输入第二行a时,当前脚本类中不存在这个变量,自然会提示找不到属性。
解决方法
有两种实用方式可以跨行共享变量:
- 用
@标记变量,将其转为控制台全局变量:gremlin> @a = g.V().next() ==>v[4104] gremlin> a ==>v[4104] - 将多行代码放在同一个执行块里,比如用分号分隔:
或者用代码块包裹:gremlin> a = g.V().next(); a ==>v[4104] ==>v[4104]gremlin> { ......1> a = g.V().next() ......2> a ......3> } ==>v[4104]
额外说明
控制台的这种隔离设计是为了避免不同脚本执行时的变量污染。如果需要在多个输入行中复用变量,@前缀的全局变量是最便捷的方案。
内容的提问来源于stack exchange,提问作者zjffdu
相关产品推荐
相关产品推荐

