提问人:Dan 提问时间:10/27/2023 更新时间:10/30/2023 访问量:36
如果数学函数中的零在算术表达式中因参数错误而下降,它如何保护 nil
How guard nil in math function if it drops with bad argument in arithmetic expression
问:
尝试弄清楚,在生成 GQL 模式时,
为什么如果源 var 中的数据存在(比如说),
没有错误
但如果是 NIL,则代码会生成错误
当我用这样的代码转换价值时::float
square_plot
50
可能似乎没有验证通过
法典
field(:square_plot, :float) // my var is `50.0` in DB
field :square_plot_ft, :float do
if square_plot > 0 do
resolve(fn _args, %{source: source} -> {:ok, Float.round(source.square_plot*10.7639, 0)} end)
end
end
if value NOT NIL GQL 响应
{
"data": {
"unit": {
"squareTotalFt": 1615.0,
"squareTotal": 150.0,
"squarePlotFt": 538.0,
"squarePlot": 50.0
}
}
}
如果 value 为 NIL,则表示 GQL 响应
"Internal server error"
和服务器 ERR
** (exit) an exception was raised:
** (ArithmeticError) bad argument in arithmetic expression
(platform) lib/units_web/schema/object.ex:228: anonymous fn/2 in UnitsWeb.Schema.Unit.__abs
inthe_type__/1
答:
0赞
Aleksei Matiushkin
10/27/2023
#1
令人惊讶的是,在 erlang 中,因此在 elixir 中,比较/涉及不同类型的比较是合法的。<
>
更令人惊讶的是,任何原子都大于任何数字(请参阅文档中的原子排序)。
nil > 0
#⇒ true
然后我们进入 ,尝试哪个是 ,这显然会提高。if
square_plot*10.7639
nil*10.7639
正确的代码是:
field :square_plot_ft, :float do
if is_number(square_plot) and square_plot > 0 do
resolve(...)
end
end
评论