내 붐 |> if(do: "Yes", else: "No") [Elixir]

12394 단어 Elixir

소개


  • 어떤 조건에 맞을 때는 "예", 그렇지 않은 경우는 "아니오"를 반환하는 함수를 만들고 싶습니다.

  • AtCoder 문제가 발생했습니다.
  • A - Fortune Cookies

  • 여러가지 쓰는 방법이 있지만, 내 붐은 pipe operator |>을 사용한 |> if(do: "Yes", else: "No")입니다.
  • 이후, 이 기사에서는 리스트의 내용이 100보다 작을 때는 "Yes", 그렇지 않은 경우는 "No"로 합니다.

    내 붐


    iex> [1, 2, 3] |> Enum.all?(& &1 < 100) |> if(do: "Yes", else: "No")
    "Yes"
    
    iex> [1, 2, 101] |> Enum.all?(& &1 < 100) |> if(do: "Yes", else: "No")
    "No"
    

    패턴 매치


    defmodule Awesome do
      def solve(list), do: Enum.all?(list, & &1 < 100) |> do_solve()
    
      defp do_solve(true), do: "Yes"
    
      defp do_solve(false), do: "No"
    end
    

    if 문처럼


    defmodule Awesome do
      def solve(list) do
        if Enum.all?(list, & &1 < 100) do
          "Yes"
        else
          "No"
        end
      end
    end
    

    익명 함수를 만들고 파이프 연산자로 연결


    defmodule Awesome do
      def solve(list) do
        Enum.all?(list, & &1 < 100)
        |> (fn b -> if b, do: "Yes", else: "No" end).()
      end
    end
    
  • 나는 오랫동안이 글을 쓰고 있었지만 뭔가 이상합니다.
  • 여담이지만이 기술은 누군가의 기사에서 알고 있으며 이전 계산 결과를 다음 함수의 첫 번째 인수가 아닌 위치로 전달하고 호출 할 때 유용합니다.
    Awesome.get_content() # .wavデータが取得できるすんごい関数
    |> (fn content -> File.write("alarm.wav", content) end).()
    

    다른 f는 무엇입니까?


  • 매크로입니다
  • 링크 된 공식 문서의 샘플을 볼 수 있다고 생각하는 것이 있습니다.
  • 다른 f
  • @piacerex
  • Elixir의 if는 공짜 함수
  • 항상 감사합니다!


  • if를 파이프에서 사용Elixir
  •   defmacro if(condition, clauses) do
        build_if(condition, clauses)
      end
    
      defp build_if(condition, do: do_clause) do
        build_if(condition, do: do_clause, else: nil)
      end
    
      defp build_if(condition, do: do_clause, else: else_clause) do
        optimize_boolean(
          quote do
            case unquote(condition) do
              x when :"Elixir.Kernel".in(x, [false, nil]) -> unquote(else_clause)
              _ -> unquote(do_clause)
            end
          end
        )
      end
    
      defp build_if(_condition, _arguments) do
        raise ArgumentError,
              "invalid or duplicate keys for if, only \"do\" and an optional \"else\" are permitted"
      end
    

    2021/01/11(월) 추가



  • 소스 코드 님의 글에서 @pojiro
  • case/2

  • 파이프라인에서 case를 사용할 수 있다는 것을 알았습니다. (phx.gen.auth 코드에서 발췌

  • Wrapping Up


  • Enjoy htps : // 라고 해서 r. 코 m / 아코 t도 s / s 타츠 s / 1332383690131816448 !!!
  • 좋은 웹페이지 즐겨찾기