Elixir,默认关键字列表参数

尼古加

在elixir中,可以在函数定义中使用默认参数,但是我发现无法使用单个关键字列表参数来实现,例如:

def do_stuff(
  success: sucess \\ fn(conn) -> conn end,
  error: error
) do
  # ...
end

另外,我考虑过通过使用类似JS promises的方法来避免这种“回调传递”风格的编码,但是我找不到Elixir的promises实现。

也许在语言中内置了一些功能,可以帮助我编写更好的代码并更严格地遵守Elixir标准。

主要问题:可以使用默认关键字参数吗?

附带的问题: Elixir是否提供某种帮助来避免这种“回调传递”风格的编程,而倾向于一种更具反应性/可组合性的机制?

什么隐藏

不,不可能使用默认的关键字参数,因为关键字参数只是单个关键字列表上的语法糖:

do_stuff(success: ..., failure: ...)

是相同的

do_stuff([success: ..., failure: ...])

因此,关键字列表实际上只是一个参数。您在函数定义中所做的工作传递给的关键字列表上的内容相匹配do_stuff/1:请务必注意这一点,因为如果关键字的顺序不同(例如do_stuff(failure: ..., success: ...),则函数定义将不匹配

我认为克服此问题的一种好方法是对该do_stuff函数使用两个不同的参数

def do_stuff(success \\ fn(conn) -> conn end, failure \\ fn(err) -> err end)

这样,默认参数可以按预期工作。如果您确实需要将参数作为关键字列表,则可以在函数体内处理默认值:

def do_stuff(options) do
  success = options[:success] || (fn(conn) -> conn end)
  failure = options[:failure] || (fn(err) -> err end)
end

最后,关于您提到的“回调样式” fn,除非您开始研究并发性和消息传递,否则我不知道有什么方法会与完成时传递的方法有很大不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Elixir更新嵌套关键字列表

来自分类Dev

Swift参数中的默认关键字

来自分类Dev

如何在关键字中为可选列表参数设置默认值

来自分类Dev

在python中初始化默认关键字参数列表

来自分类Dev

Clojure关键字参数默认取决于其他关键字参数吗?

来自分类Dev

Ruby关键字参数

来自分类Dev

无关键字参数

来自分类Dev

获取 Elixir 中的所有参数和关键字参数

来自分类Dev

关键字和非关键字参数的顺序

来自分类Dev

带有默认第一和第二参数的关键字参数

来自分类Dev

设置关键字参数的默认值时,可以引用位置参数吗?

来自分类Dev

关键字和默认参数宏会干扰Racket中的可变参数

来自分类Dev

在DLL中使用默认关键字

来自分类Dev

覆盖Elasticsearch的默认关键字分析

来自分类Dev

旧界面和默认关键字

来自分类Dev

旧界面和默认关键字

来自分类Dev

如何在Elixir中按关键字拆分列表

来自分类Dev

可以在不提供默认值的情况下使用关键字参数吗?

来自分类Dev

如何在Python中访问关键字参数的默认值?

来自分类Dev

Racket中关键字和函数参数默认值的宏

来自分类Dev

Racket中关键字和函数参数默认值的宏

来自分类Dev

__init__中的super()似乎未实现父对象的默认关键字参数

来自分类Dev

结合位置、关键字和默认参数并记录它们的 Julian 方法是什么?

来自分类Dev

带有默认关键字的初始化列表的用法

来自分类Dev

带有默认关键字的初始化列表的用法

来自分类Dev

Asyncio中的请求-关键字参数

来自分类Dev

matplotlib radviz中的关键字参数

来自分类Dev

python类关键字参数

来自分类Dev

模板参数中的const关键字

Related 相关文章

热门标签

归档