def get_user_profile(client)
client.get_json("/current_user") => { id: }
client.get_json("/profile", { id: }) => { nick:, bio: }
return { id:, nick:, bio: }
end
如果您不能一眼看懂这段代码,可以去搜索一下,试着独立解决。如果图省事,请直接看本文末尾的提示。
我个人觉得一旦强迫自己接受这个语法,会写起来非常简单(我可没说读起来)。但是对于还没明白这个语法的人以及新人,这简直就是灾难。Ruby3 似乎尝试去简化代码有点过头了,{x: }
对我来说真的就像是在右边缺少了什么东西,怎么看都很别扭。我不希望眼睁睁看着 Ruby 成为一个对新人来说 Perl 一般的语言。
使用=>
符号以及in
关键字,作为模式匹配,我个人也觉得比较奇葩。向右赋值的观念和传统的左值区别较大,会让程序员一时找不到变量。
p a: 2, b: 3
# {:a=>2, :b=>3}
p {a: 2, b: 3}
# 语法错误
关于函数参数中传递 Hash,社区似乎几年前纠正过一次行为,我已经无心了解之前的状态。我只知道,现在Ruby 3.2
中,我完全不能理解第一种写法为什么会传一个 Hash 进去,而第二种写法,显式写一个 Hash literal 却直接被识别为语法错误。并且,上述第一种写法,明显与关键字参数的用法冲突了,假如不是p
,而是另一个程序员写的函数 func
,试问 func a: 2, b:3
到底是什么含义?
以上仅代表个人观点,请理性讨论。似乎论坛没有投票功能,我在 1 楼和 2 楼统计一下:您是否觉得 Ruby3 语法优雅/合理。邀请您参与投票,以统计社区广泛且真实的看法。
Snippet1 提示:
=>
用于模式匹配,=>
右边的{x: }
写法是模式匹配的一部分来进行赋值。而最后面的 return 语句中的{x: }
不是模式匹配而是缩略写法。