我是Ruby的新手,我正在尝试理解这种语法,所以我可以转换为Groovy。 https://gist.github.com/brettporter/1723108
state = :body
和
conflict = {
:lineno => index + 1
}
和
conflict[:left_conflict]
状态和冲突对象是否包含body和lineno以及left_conflict字段? 如果是这样,left_conflict字段如何填充/分配值? 什么是在Groovy中执行此操作的等效方法
答案 0 :(得分:3)
在Ruby赋值中使用=(等号)字符。此示例将数字5分配给局部变量v:
v = 5
如果先前未引用该变量,则赋值将创建局部变量。
state = :body
被称为带有Symbol
实例:body
的本地变量赋值。
Symbol对象表示Ruby解释器中的名称和一些字符串。它们是使用
:name
和:"string"
文字语法以及各种to_sym
方法生成的
conflict
也是一个局部变量,它持有Hash
个对象。
conflict[:left_conflict]
,这里我们使用方法Hash#[]
使用密钥:left_conflict
访问哈希值。:left_conflict
是哈希对象的一个键,它正在被保留通过conflict
局部变量。
答案 1 :(得分:2)
这些是Ruby中的symbols
。
state = :body
将变量state
设置为符号:body
Groovy没有符号(参见here)所以可能的Groovy替换就是使用Strings作为状态和映射键,如:
// Just use a String to maintain our state
state = 'body'
和
// Create a map
conflict = [ lineno: index + 1 ]
和
// get a value from a map
conflict[ 'left_conflict' ]
将这些魔术字符串放入某种最终的静态变量
可能是明智之举