了解Ruby赋值语法

时间:2014-01-07 12:50:39

标签: ruby syntax groovy

我是Ruby的新手,我正在尝试理解这种语法,所以我可以转换为Groovy。 https://gist.github.com/brettporter/1723108

state = :body

conflict = {
            :lineno => index + 1
}

conflict[:left_conflict]

状态和冲突对象是否包含body和lineno以及left_conflict字段? 如果是这样,left_conflict字段如何填充/分配值? 什么是在Groovy中执行此操作的等效方法

2 个答案:

答案 0 :(得分:3)

Assignment

  

在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' ]

将这些魔术字符串放入某种最终的静态变量

可能是明智之举