我有一个可能包含重复的列表.我想计算列表中每个项目的实例数.我的计划是:
list
|> Enum.reduce(%{}, fn
item, %{item => count}=acc -> %{acc | item => count + 1}
item, acc -> Map.put(acc, item, 1)
end)
Run Code Online (Sandbox Code Playgroud)
但是,这无法编译错误illegal use of variable item inside map key match, maps can only match on existing variable by using ^item
.
所以我改变了第一个模式item, %{^item => count}=acc
.那时,错误就变成了unbound variable ^item
.
我不知道该怎么做.我知道可以基于另一个模式匹配一个参数(比如fn a, a -> true
一个比较函数的头部),但显然不是这种情况.我试着用守卫做这件事但Map.has_key?/2
不能戴卫兵.我在这里找到了很多关于在地图上匹配的问题,但是当匹配的值来自另一个参数时,我没有这么做.
我在 SQLAlchemy 中设置了一个查询,该查询运行得有点慢,尝试对其进行优化。由于未知的原因,结果使用了隐式交叉连接,这不仅速度慢得多,而且产生完全错误的结果。I\xe2\x80\x99 对表名和参数进行了匿名处理,但没有进行任何更改。有谁知道这是从哪里来的?
\n\n为了更容易找到:新发出的 SQL 和旧发出的 SQL 的区别在于新发出的 SQL 具有更长的 SELECT,并且在任何 JOIN 之前的 WHERE 中提到了所有三个表。
\n\n原始代码:
\n\ncust_name = u'Bob'\nproj_name = u'job1'\nitem_color = u'blue'\nquery = (db.session.query(Item.name)\n .join(Project, Customer)\n .filter(Customer.name == cust_name,\n Project.name == proj_name)\n .distinct(Item.name))\n\n# some conditionals determining last filter, resolving to this one:\nquery = query.filter(Item.color == item_color)\n\nresult = query.all()\n
Run Code Online (Sandbox Code Playgroud)\n\n由flask_sqlalchemy.get_debug_queries记录的原始发出的SQL:
\n\nQUERY: SELECT DISTINCT ON (items.name) items.name AS items_name\nFROM items JOIN projects ON projects.id = items._project_id JOIN customers ON customers.id = projects._customer_id\nWHERE customers.name = %(name_1)s …
Run Code Online (Sandbox Code Playgroud) 我发现Elixir程序可以通过NIF(本机实现的功能)或OS级别的端口运行C代码.阅读过那些和类似的链接,我不是百分之百地知道何时使用一种或另一种方法(或完全不同的其他方法?),并认为对我自己和其他新手进行直接比较会很好.谁能提供?
在Elixir中,何时应该使用Macro.escape/1
而不是quote/1
?我看过初学者的指南并没有帮助.
我正在Elixir写一个游戏引擎.(是的,我知道它不是一种本身就适合的语言 - 关键是要看一下非典型语言的使用如何影响结果的结构.)
因此,我有几个主管要在比赛开始时运行 - 但他们应该监督什么取决于游戏.我的想法是让用户在config.exs
文件中列出必要的子节点,加上参数和选项作为元组列表,然后管理程序本身只是从应用程序环境中提取这些元组并使用它们的内容作为参数worker\2
(或者worker\3
,视情况而定).
但是,我找不到任何Elixir等同于Python的元组解包.我可以通过一个简单的函数自己完成这个特定的情况:
def unpack_worker({module, args}) do
worker(module, args)
end
def unpack_worker({module, args, opts}) do
worker(module, args, opts)
end
Run Code Online (Sandbox Code Playgroud)
但这种情况充其量只是笨拙,并且必须再次针对我可能需要这种可配置性的每个功能进行编写.
elixir ×4
beam ×1
c ×1
compare ×1
count ×1
dictionary ×1
duplicates ×1
escaping ×1
macros ×1
postgresql ×1
python ×1
quote ×1
sqlalchemy ×1