如何习惯性地检查变量是否"is falsey"或"not true"在 Elixir 中?



我正在凤凰城编写一个查询,我需要检查字段falsey的位置。

例如where(query, [x], x is not true)

令我惊讶的是,关于如何习惯性地检查长生不老药中的falseynot 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的概念,它们区分falseNULL甚至SQL语法都大喊大叫。要找到false应该做的:

WHERE x = FALSE -- or WHERE x = 0

并用于查找NULL

WHERE x IS NULL

也就是说,如果你发现自己在数据库中既没有查找 FALSE 也没有 NULL,那么你的数据库设计就有问题,这肯定会在以后咬你。


OTOH,在Elixir本身中,这个问题是完全有效的。我们有两个falsey术语:原子falsenil。其他一切都被认为是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"

最新更新