【发布时间】:2017-11-02 03:12:48
【问题描述】:
我用这种风格做了相当多的模式匹配:
def action(%{start_date: start_date, amount: amount, notify: notify %}) do
# some action
end
大多数情况下,我为参数选择的名称与地图中的名称相同。是否有指定模式匹配大小写而不重复键和值的相同名称的快捷方式?
此伪代码行中的某些内容:
def action(%{start_date: %s, amount: %s, notify: %s}) do
IO.inspect(start_date)
# some action
end
【问题讨论】:
-
在我的拙见中,这节省了一些字符,但引入了一定的隐含性。在你给出的那个例子中这可能并不明显,但是随着越来越多的这种隐含性,代码变得难以阅读,需要更多的间接思考。保持代码明确并付出额外字符的代价。
-
@smoes “间接思考”的定义取决于对您而言什么是“直接”以及您的习惯是什么。有时,当涉及到许多要显式匹配的地图成员时,它会变得嘈杂,需要更多的“间接阅读”。我从来没有为此使用任何短缺/语法糖,但我可以很容易地想到一些情况,这很有意义。例如。
Stream模块声明了一堆宏,目的只有一个:关闭函数定义中的杂音。 -
仅供参考,github.com/whatyouhide/short_maps 使用
~msigil 完成了类似的事情。 -
@mudasobwa 我完全同意你的部分帖子。它有时有助于隐藏一些细节,使其具有声明性和更明确。示例
whatyouhidepostet 例如在使用赋值进行匹配时,实现了一些非常直观的东西。人们可以以某种方式猜测,发生了什么。在函数声明中,我必须查找它或谷歌以找出它的作用。在这一点上,我愿意接受一些代码噪音。
标签: elixir