下面是我的方法级代码。
def create_todo_lists(options={})
options[:title] ||= "My todo List"
end
我是这样通过的。
create_todo_lists title: ""
我无法理解我的标题arg
是如何在方法中使用的。谁能解释我的方法是如何接受标题参数谁能写一个等效的JS代码相同,我理解JS
更好。
如果我们试着分析你的问题,特别是你的情况,有几个重要的概念。
- 默认值
def create_todo_lists(选项= {})
options={}
在这里表示,如果调用这个函数时没有传递任何参数,它将得到一个名为options
的参数,该参数将是一个空哈希。
- 可选括号
调用create_todo_lists title: "
create_todo_lists
中的时没有使用括号,因为在Ruby方法调用中括号是可选的,所以它是有效的语法,类似于
create_todo_lists(title: "")
- 单键值对哈希在ruby中,单个键值对的哈希也有括号可选,因此在您的情况下
title: "}和{title: "}
是相似的。
- 两种不同的Hash语法当使用symbol作为哈希键时,Ruby有两种不同的语法,因此在你的情况下
title: " and:title => "
非常相似。
场景中另一个有趣的概念是
- | | =操作符
在Ruby中也是非常独特的。只有当左侧变量的值为false
或nil
时,该运算符才会将右侧变量的值赋给左侧变量。
因此,在您的场景中,create_todo_lists
方法获得哈希作为参数,但涵盖Ruby
的几个非常重要的概念。
希望这对你有帮助。:)
你的方法正在接受一个哈希值
在您的示例中,您当前正在发送散列
{ title: '' }
options[:title] ||= "My todo List"正在检查key:title是否存在,如果它存在…什么也不做。如果不是,设置为"My todo List"
你传入了一个空字符串:title,它不等于nil。
所以你的例子什么也做不了。
你可以这样做:
create_todo_lists title: nil
或
create_todo_lists {}
或
create_todo_lists
所有这些将导致:
{ title: 'My todo List' }
这只是一个可选参数,默认为空散列。
这是Ruby世界中用来一次提供一堆可选参数的一个小技巧。在使用模板dsl时非常有用,这种方式可以为html tags
等添加属性。
对于JavaScript的例子,我可能会引用这个答案:多个参数vs选项对象。除了options参数是可选的