我正在学习Ruby,我遇到了一个问题。
这是我写的代码。
class Customer
def puts_result(name, addr)
return name, addr
end
end
aaron = Customer.new
puts aaron.puts_result "Aaron", {country: "Taiwan", city: "Tainan"}
puts aaron.puts_result "Aaron", country: "Taiwan", city: "Tainan"
puts aaron.puts_result {country: "Taiwan", city: "Tainan"}, "Aaron"
我调用puts_result方法并通过三种不同的方式传递参数。
在第一种方式中,我使用花括号传递哈希,并且它工作正常。 在第二种方式中,我传递了没有花括号的哈希,并且它仍然被罚款。
我的问题在于第三种方式,我将散列作为带花括号的第一个参数传递,但它返回错误。
(repl):15:语法错误,意外':',期待'}'看跌期权 aaron.puts_result {country:" Taiwan",city:" Tainan"}," Aaron" (repl):15:语法错误,意外',',期待'}'把aaron.puts_result {country:" Taiwan",city: " Tainan"}," Aaron"
我的粗心大意是什么?
答案 0 :(得分:2)
第三次通话中出现错误
puts aaron.puts_result {country: "Taiwan", city: "Tainan"}, "Aaron"
这里,解析开口大括号时存在语法歧义。它可以是哈希的开头(这是你想要的)或传递给方法的块的开头。
Ruby的解析器总是假定方法之后的左括号表示块的开始,除非您将参数放在显式括号中。这将解决歧义,因为块永远不会在括号内声明,但总是在外面。
使用您的代码,您可以解决模糊性,如下所示:
puts aaron.puts_result({country: "Taiwan", city: "Tainan"}, "Aaron")
要从中获得可重复的规则:当第一个参数是带括号的文字散列时,请始终记住在方法调用周围使用paranthesis。