Ruby中把Symbol作为关键字参数值的调用语法是否正确?
问题解答
你给出的调用写法navigate_to page: :inbox是完全符合Ruby语法规范的合法写法,不存在语法错误。
这种两个冒号相邻的写法只是两种Ruby语法规则叠加的正常现象:
- 前面的
page:是Ruby关键字参数的调用语法,冒号跟在参数名后表示这是关键字参数的键 - 后面的
:inbox是Ruby符号(Symbol)类型的标准字面量写法,前缀冒号是符号类型的标识
你可以和传字符串值的写法做对比,二者结构完全一致:
# 传字符串作为参数值的写法 navigate_to page: "inbox" # 传符号作为参数值的写法 navigate_to page: :inbox
只是因为符号值本身自带前缀冒号,才会出现两个冒号挨在一起的效果。类似写法在Ruby生态中非常普遍,比如Rails框架里的redirect_to action: :index、render partial: :form都是完全相同的结构,属于社区广泛使用的标准写法。
如果觉得这种写法视觉上不习惯,也可以在两个冒号之间加空格,写成navigate_to page: :inbox,语法上同样合法,只是没有必要特意修改,直接写连在一起的形式是更通用的习惯。
内容的提问来源于stack exchange,提问作者Ivo Dimitrov
相关产品推荐
相关产品推荐

