gpt4 book ai didi

ruby - 我可以将哈希作为方法中的第一个参数吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:43 25 4
gpt4 key购买 nike

我在学习 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: syntax error, unexpected ':', expecting '}' puts aaron.puts_result {country: "Taiwan", city: "Tainan"}, "Aaron" (repl):15: syntax error, unexpected ',', expecting '}' puts aaron.puts_result {country: "Taiwan", city: "Tainan"}, "Aaron"

是不是我粗心了?

最佳答案

第三次调用时出现错误

puts aaron.puts_result {country: "Taiwan", city: "Tainan"}, "Aaron"

此处,在解析左花括号时存在语法歧义。它可以是哈希的开始(这是您想要的),也可以是传递给方法的 block 的开始。

Ruby 的解析器总是假定方法后的左大括号表示 block 的开始,除非您将参数放在显式括号中。这将解决歧义,因为 block 永远不会在括号内声明,而总是在括号外。

使用您的代码,您可以按如下方式解决歧义:

puts aaron.puts_result({country: "Taiwan", city: "Tainan"}, "Aaron")

要从中获得可重复的规则:当第一个参数是带大括号的文字散列时,请始终记住在方法调用周围使用括号。

关于ruby - 我可以将哈希作为方法中的第一个参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42326556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com