Elixir确保值不是0或零
在这个函数中,我需要先检查price变量是0还是nil,然后再通过执行priceFloat=price/1将其转换为float,否则会出现算术错误Elixir确保值不是0或零,elixir,Elixir,在这个函数中,我需要先检查price变量是0还是nil,然后再通过执行priceFloat=price/1将其转换为float,否则会出现算术错误 def insert_product_shop(conn, product_id, shop_id, price) do IO.inspect(price, label: "price") priceFloat = price / 1 changeset = Api.ProductShop.changeset(%Api.
def insert_product_shop(conn, product_id, shop_id, price) do
IO.inspect(price, label: "price")
priceFloat = price / 1
changeset = Api.ProductShop.changeset(%Api.ProductShop{p_id: product_id, s_id: shop_id, not_in_shop_count: 0, price: priceFloat})
errors = changeset.errors
valid = changeset.valid?
case insert(changeset) do
{:ok, product_shop} ->
{:ok, product_shop}
{:error, changeset} ->
{:error, :failure}
end
end
这样做的惯用方法是什么
我试过了,但仍然出现了算术错误:
def insert_product_shop(conn, product_id, shop_id, price) do
IO.inspect(price, label: "price")
case {price} do
{price} when price > 0 ->
priceFloat = price / 1
changeset = Api.ProductShop.changeset(%Api.ProductShop{p_id: product_id, s_id: shop_id, not_in_shop_count: 0, price: priceFloat})
errors = changeset.errors
valid = changeset.valid?
case insert(changeset) do
{:ok, product_shop} ->
{:ok, product_shop}
{:error, changeset} ->
{:error, :failure}
end
end
end
代码不起作用的原因是,在Elixir中,nil>0为真。您可以这样做:
if price not in [0, nil] do
...
else
...
end
或
代码不起作用的原因是,在Elixir中,nil>0为真。您可以这样做:
if price not in [0, nil] do
...
else
...
end
或
实现这一点的惯用方法是在函数子句中直接进行模式匹配: def insert_product_shopconn,product_id,shop_id,price 当not是_numberprice时,do:{:error,:nil} def insert_product_shopconn,product_id,shop_id,price 当价格 {:好的,产品商店} {:错误,变更集}-> {:错误,:失败} 终止 终止 前两个条款可能会合并为一个,并有一个防护装置
当不是_numberprice或price时,惯用的方法是在函数子句中直接进行模式匹配: def insert_product_shopconn,product_id,shop_id,price 当not是_numberprice时,do:{:error,:nil} def insert_product_shopconn,product_id,shop_id,price 当价格 {:好的,产品商店} {:错误,变更集}-> {:错误,:失败} 终止 终止 前两个条款可能会合并为一个,并有一个防护装置
什么时候不是价格,谢谢。但是它产生了这个错误。无case子句匹配:这是不可能的。错误是诱发的,请显示它发生的准确线路。啊,明白了。调用者希望{:error,{}作为响应。请参阅更正的变体。请注意,您最初的尝试也出现了此问题。它现在返回预期值并正常工作。谢谢我想如果价格为0或零,我仍然会插入数据库。但我可以改变。干杯,谢谢。但是它产生了这个错误。无case子句匹配:这是不可能的。错误是诱发的,请显示它发生的准确线路。啊,明白了。调用者希望{:error,{}作为响应。请参阅更正的变体。请注意,您最初的尝试也出现了此问题。它现在返回预期值并正常工作。谢谢我想如果价格为0或零,我仍然会插入数据库。但我可以改变。啦啦队打得很好。谢谢,很好用。谢谢