我正在凤凰城编写一个查询,我需要检查字段falsey
的位置。
例如where(query, [x], x is not true)
令我惊讶的是,关于如何习惯性地检查长生不老药中的falsey
或not true
的信息并不多。
只是为了更清楚一些伪代码:
iex(1)> x = nil or x = false
iex(2)> x is not true #desired idiomatic expression
> true
我正在凤凰城写一个查询
首先没有">凤凰城查询"这样的东西。[在这种情况下]查询都是关于与数据库对话,Phoenix基本上不能不关心数据库。一个人可能有一个完美的凤凰城项目,背后没有数据库。
您正在查询的是Ecto
,使用Ecto.Query
。
例如
where(query, [x], x is not true)
谈到数据库,这样的查询有点意义。数据库自然没有falsey
的概念,它们区分false
和NULL
甚至SQL语法都大喊大叫。要找到false
应该做的:
WHERE x = FALSE -- or WHERE x = 0
并用于查找NULL
WHERE x IS NULL
也就是说,如果你发现自己在数据库中既没有查找 FALSE 也没有 NULL,那么你的数据库设计就有问题,这肯定会在以后咬你。
OTOH,在Elixir本身中,这个问题是完全有效的。我们有两个falsey
术语:原子false
和nil
。其他一切都被认为是truthy
值。
要检查它,应该使用Kernel.!/1
if !x, do: IO.puts("#{x.inspect} is truthy")
你可以做这样的事情:
x = false
if x do
"truthy"
else
"falsey"
end
=> "falsey"
如果x = nil
的话,这将返回"falsey"
。其他一切都会恢复"truthy"
速记:if x, do: "truthy", else: "falsey"