我不是很清楚这是什么意思。这是Ruby on Rails的控制器类,我一直在尝试弄清楚下面的代码是做什么的。
payload = if params.key? :data //do something else //else do something end
这是在控制器类中。params.key? :data是做什么的?变量data并不存在于整个类中,而只存在于这个块中。
params.key? :data
data
xlpyo6sf1#
:data不是变量而是符号。.key?是一个方法,在ruby中,传递:data这样的参数不需要括号。因此,这段代码询问params是否将符号:data作为键(在Map中),并使用返回的布尔值作为条件。
:data
.key?
params
lvmkulzt2#
在这个代码片段中,data不是变量,它是symbol文字。Java没有Ruby符号AFAIR的直接对应物,但你可以把它看作是一些不可变的标识符(类似于“带有一些附加的很酷的属性的不可变字符串,这些属性在我们这里讨论的上下文中并不重要”)。接下来,params表示查询参数,由底层中间件提供,它是一种类似哈希的数据结构,其中Hash是Ruby的对应物,对应于Java的HashMap,将键Map到值。接下来,params.key? :data和params.key?(:data)是一样的--在Ruby中,方法参数周围的括号在大多数情况下是可选的,人们倾向于滥用这个有争议的特性,它只是检查params hash(map)是否包含:data键(参见Hash#key?)。最后,由于Ruby中的所有内容都是表达式,因此if... else... end有一个有意义的返回值(特定分支执行的结果),该返回值将被进一步赋给payload。
Hash
HashMap
params.key?(:data)
if... else... end
payload
2条答案
按热度按时间xlpyo6sf1#
:data
不是变量而是符号。.key?
是一个方法,在ruby中,传递:data
这样的参数不需要括号。因此,这段代码询问
params
是否将符号:data
作为键(在Map中),并使用返回的布尔值作为条件。lvmkulzt2#
在这个代码片段中,
data
不是变量,它是symbol文字。Java没有Ruby符号AFAIR的直接对应物,但你可以把它看作是一些不可变的标识符(类似于“带有一些附加的很酷的属性的不可变字符串,这些属性在我们这里讨论的上下文中并不重要”)。接下来,
params
表示查询参数,由底层中间件提供,它是一种类似哈希的数据结构,其中Hash
是Ruby的对应物,对应于Java的HashMap
,将键Map到值。接下来,
params.key? :data
和params.key?(:data)
是一样的--在Ruby中,方法参数周围的括号在大多数情况下是可选的,人们倾向于滥用这个有争议的特性,它只是检查params
hash(map)是否包含:data
键(参见Hash#key?)。最后,由于Ruby中的所有内容都是表达式,因此
if... else... end
有一个有意义的返回值(特定分支执行的结果),该返回值将被进一步赋给payload
。