Can';我不理解RubyMonk上的此方法教程
我目前正在rubymonk.com上做练习,但就是想不起这个问题 我要写三种方法,加、减和计算。Calculate是一种结合了add和subtract方法的方法,具体取决于传递给该方法的最后一个参数,该参数应该是包含符号“:add”或“:subtract”的哈希 这是解决方案代码:Can';我不理解RubyMonk上的此方法教程,ruby,methods,Ruby,Methods,我目前正在rubymonk.com上做练习,但就是想不起这个问题 我要写三种方法,加、减和计算。Calculate是一种结合了add和subtract方法的方法,具体取决于传递给该方法的最后一个参数,该参数应该是包含符号“:add”或“:subtract”的哈希 这是解决方案代码: def add(*numbers) numbers.inject(0) { |sum, number| sum + number } end def subtract(*numbers) sum =
def add(*numbers)
numbers.inject(0) { |sum, number| sum + number }
end
def subtract(*numbers)
sum = numbers.shift
numbers.inject(sum) { |sum, number| sum - number }
end
def calculate(*arguments)
# if the last argument is a Hash, extract it
# otherwise create an empty Hash
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
options[:add] = true if options.empty?
return add(*arguments) if options[:add]
return subtract(*arguments) if options[:subtract]
end
除了这句话,我什么都懂:
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
即使这样,我也明白发生了什么,但我不明白为什么会有第二个“?”或“:{}”出现。谁能给我解释一下这里发生了什么事
谢谢 评论实际上解释了这一点。另一种书写方式是:
if (arguments[-1].is_a?(Hash)) {
arguments.pop
}
else {
{}
}
其中参数[-1]表示最后一个参数。它是一个三元逻辑运算符 格式为:
<expression to evaluate> ? <result if expression> : <result if !expression>
另外,{}是空哈希对象的构造函数-这是一个保护子句,用于确保赋值后
options
不会nil
。这很有意义,谢谢。我已经读过三元运算符了,但大约是前两章,我完全忘记了语法。谢谢你的帮助:)现在人们会写def减法(*数字);数字。注入(&:-);end
。sum=numbers.shift
通过注入方法完成:当未指定初始值时,则使用集合的第一个元素作为memo的初始值。
if arguments[-1].is_a?(Hash)
arguments.pop
else
{}
end