Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir确保值不是0或零_Elixir - Fatal编程技术网

Elixir确保值不是0或零

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.

在这个函数中,我需要先检查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.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或零,我仍然会插入数据库。但我可以改变。啦啦队打得很好。谢谢,很好用。谢谢