我如何从一个回调访问超出范围的一个变量药剂
问题描述:
我有以下的(人为)代码:我如何从一个回调访问超出范围的一个变量药剂
dbconn # this var holds the database connection
get_from_cache("missing_key")
defp get_from_cache(key) do
Cachex.get(:my_cache, key, fallback: &from_db/1)
end
defp from_db(key) do
select_from_db(dbconn)
end
的CacheX包说,我可以添加一个回退功能,这将被称为如果在缓存中找不到密钥。但是这个功能需要的不仅仅是关键。我知道我必须在这里丢失一些东西,但是如何从Elixir中的回调中访问dbconn变量?
答
而不是一个名为函数的引用,你可以通过一个匿名函数来Cachex.get
可以访问功能之外声明的变量:
# dbconn holds the database connection
Cachex.get(:my_cache, "missing_key", fallback: fn _key ->
select_from_db(dbconn)
end)
如果该dbconn变量不是“近”,范围明智,但是在调用堆栈的某个函数中。除了一路将它传下去之外,没有别的选择吗? – raarts
你可以发布一些示例代码?变量是词汇范围的,匿名函数可以访问定义多个级别的变量:'x = 1; (fn→fn→fn→x end end end)。()。()。()#=> 1'。 – Dogbert
我修改了一下这个问题 – raarts