ruby - `[[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]]
我尝试@
了和其他符号,但它们都导致语法错误。
解决方案
据我所知,ruby 目前(2018-06-04)没有这个功能。
没有正式的 ruby 语言规范可供参考,但有 The Ruby Spec Suite。查看language/block_spec.rb以获得一些奇怪和不寻常的块参数示例。
块参数非常强大,支持可选参数、splats、post-args、解构、嵌套解构、关键字参数、块级变量。这是相当令人印象深刻的。
如果您可以阅读 C(我看不懂)并且您真的想进一步深入研究,您可以在parse.y:2980的解释器语法中找到块参数的定义。
推荐阅读
- html5-canvas - 实例化同一 es6 类的不同类型的最佳实践
- mysql - 如何获得每个员工的最大日期值?
- regex - 具有多个参数的干净 URL
- angular - 检查页面标题是用阿拉伯文还是英文写的
- python - 两个代码片段输出之间的区别,Python3
- python - Python 脚本不在 PATH 上
- c++ - 在 QTableView 的单行中添加多行 QString
- javascript - i18n 如何在 javascript 中翻译文本
- vba - VBA - 帮助调试出错的复制/粘贴
- ruby - Different Ways of Namespacing in Ruby