2017-06-21 100 views
1

我在鳳凰應用中的以下觀點:藥劑代碼重構

defmodule TattooBackend.Web.API.V1.AccountView do 
    use TattooBackend.Web, :view 

    alias TattooBackend.Repo 

    def render("my_account.json", %{account: account}) do 
    account = account |> Repo.preload(:studio) 
    studio = account.studio 

    data = %{ 
     id: account.id, 
     email: account.email, 
    } 

    if account.studio do 
     data = studio_data(data, studio) 
    end 

    if true do 
     data = Map.put(data, :test_key, %{}) 
    end 

    data 
    end 

    defp studio_data(data, studio) do 
    studio = studio |> Repo.preload(:address) 
    address = studio.address 

    studio_data = %{ 
     id: studio.id, 
     name: studio.name, 
     address: "#{address.street}, #{address.city} #{address.zip_code}" 
    } 

    Map.put(data, :studio, studio_data) 
    end 
end 

一切,但按預期在控制檯我看到了以下警告:

warning: the variable "data" is unsafe as it has been set inside a case/cond/receive/if/&&/||. Please explicitly return the variable value instead. 

我如何重構呢?

+1

https://stackoverflow.com/questions/39550644/elixir-set-variable-in-if-statement – Dogbert

回答

1

該警告表明您應該以這樣的方式編寫條件,即條件的返回值是指定的值,而不是在條件本身內部進行賦值。

data = if 5 > 1 do 
     "best data" 
     else 
     "boring data" 
     end