ruby on rails中的条件-如果有

brvekthn  于 2022-12-18  发布在  Ruby
关注(0)|答案(2)|浏览(163)

我不是很清楚这是什么意思。这是Ruby on Rails的控制器类,我一直在尝试弄清楚下面的代码是做什么的。

payload = if params.key? :data
            //do something
          else 
            //else do something
          end

这是在控制器类中。params.key? :data是做什么的?
变量data并不存在于整个类中,而只存在于这个块中。

xlpyo6sf

xlpyo6sf1#

:data不是变量而是符号。
.key?是一个方法,在ruby中,传递:data这样的参数不需要括号。
因此,这段代码询问params是否将符号:data作为键(在Map中),并使用返回的布尔值作为条件。

lvmkulzt

lvmkulzt2#

在这个代码片段中,data不是变量,它是symbol文字。Java没有Ruby符号AFAIR的直接对应物,但你可以把它看作是一些不可变的标识符(类似于“带有一些附加的很酷的属性的不可变字符串,这些属性在我们这里讨论的上下文中并不重要”)。
接下来,params表示查询参数,由底层中间件提供,它是一种类似哈希的数据结构,其中Hash是Ruby的对应物,对应于Java的HashMap,将键Map到值。
接下来,params.key? :dataparams.key?(:data)是一样的--在Ruby中,方法参数周围的括号在大多数情况下是可选的,人们倾向于滥用这个有争议的特性,它只是检查params hash(map)是否包含:data键(参见Hash#key?)。
最后,由于Ruby中的所有内容都是表达式,因此if... else... end有一个有意义的返回值(特定分支执行的结果),该返回值将被进一步赋给payload

相关问题