gpt4 book ai didi

elixir - 为什么在 Ecto 查询中需要 pin 运算符?

转载 作者:行者123 更新时间:2023-12-03 10:22:31 25 4
gpt4 key购买 nike

在 Elixir 中,pin 运算符用于防止变量重新绑定(bind)。但是,关于 Ecto 查询,例如

from u in User, where: u.username == ^username

Programming Phoenix state(第 7 章)的作者认为

Remember, the ^ operator (called the pin operator) means we want to keep ^username the same.



但这听起来不对,因为显然,查询中的比较不会导致任何变量的重新绑定(bind)。

这本书的作者(何塞·瓦利姆合着)有误吗? Ecto 查询中的 pin 运算符是否仅仅是 Ecto DSL 的构造,而不是通常的 Elixir pin 运算符?或者查询真的有机会重新绑定(bind) username宏扩展后?

最佳答案

根据Ecto documentation , ecto 中的 pin 运算符用于查询插值:

External values and Elixir expressions can be injected into a query expression with ^

def with_minimum(age, height_ft) do
from u in "users",
where: u.age > ^age and u.height > ^(height_ft * 3.28),
select: u.name
end


尝试跳过 pin 会给您一个错误,因为 Ecto 无法找出名为 age 的数据库函数或查询表达式。 :

(Ecto.Query.CompileError) variable age is not a valid query expression. Variables need to be explicitly interpolated in queries with ^

关于elixir - 为什么在 Ecto 查询中需要 pin 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com