首页 > 解决方案 > `[[1, 2]].map {|xy@(x, y)| 等参数中的 as 模式是否存在有效的 Ruby 语法?[xy, x + y]}`?

问题描述

鉴于以下目前在 Ruby 中工作,就像 Haskell 的构造函数模式匹配的一个非常有限的版本:

[[1,[2,3]]].map {|(x, (y, z))| x + y * z} #=> [7]

我想知道它是否还支持“as-patterns”(Haskell 称之为)的语法,这基本上是将多个绑定放在相同的参数上,如下所示:

[[1,[2,3]]].map {|(x, yz@(y, z))| [x + y * z, yz]} #=> [7, [2,3]]

我尝试@了和其他符号,但它们都导致语法错误。

标签: rubymri

解决方案


据我所知,ruby 目前(2018-06-04)没有这个功能。

没有正式的 ruby​​ 语言规范可供参考,但有 The Ruby Spec Suite。查看language/block_spec.rb以获得一些奇怪和不寻常的块参数示例。

块参数非常强大,支持可选参数、splats、post-args、解构、嵌套解构、关键字参数、块级变量。这是相当令人印象深刻的。

如果您可以阅读 C(我看不懂)并且您真的想进一步深入研究,您可以在parse.y:2980的解释器语法中找到块参数的定义。


推荐阅读