한 줄의 즐거움 테스트를 닫을 수 있다면 매우 유용할 것이다
5060 단어 happy
묘사
제 코드가 좀 비슷해요. def update(conn, %{"uid" => uid_param, "name" => name_param, "pidx" => pidx, "perm" => perm_params} = params) do
happy_path! do
# snip
{redirect, redirect_to} = case Map.get(params, "redirect", nil) do
"show" -> {"show", permissions_path(conn, :show, uid, name)}
_ -> {nil, permissions_path(conn, :index, uid)}
end
# snip
end
end
일치가 완전히 일치하므로 투석기 문제가 발생할 수 있습니다.permissions_controller.ex:112: The variable _@8 can never match since previous clauses completely covered the type {'nil' | <<_:32>>,_}
나는 그것들을 두 가지 다른 상황으로 나누어 하나의 변수로 설정할 수 있지만, 이것은 매우 시끄럽고, 내가 더 좋아하는 것을 분리할 수 있다.이런 표현식의 내부 즐거움 사례 생성을 금지할 수 있는 특수한 tag
나 어떤 것(나는 이름을 생각하지 못했고 너무 길다)을 사용할 수 있습니까? 그러면 나는 이렇게 해서 투석기를 기쁘게 할 수 있습니다. def update(conn, %{"uid" => uid_param, "name" => name_param, "pidx" => pidx, "perm" => perm_params} = params) do
happy_path! do
# snip
@already_happy {redirect, redirect_to} = case Map.get(params, "redirect", nil) do
"show" -> {"show", permissions_path(conn, :show, uid, name)}
_ -> {nil, permissions_path(conn, :index, uid)}
end
# snip
end
end
내 머릿속에 나타날 수 있는 이름: @already_happy
,@happy
,@ignore
,등등...더 좋은 방법은 태그를 사용하지 않고 표현식의 반환 형식에 일치하는 것입니다. 항상 일치하는지 확인하고, 항상 일치하면 내부 대소문자를 보내지 마십시오.이렇게 하는 것이 더 어렵지만 더 정확할 것이다.
@nomatch
기능 제안에 감사드립니다.그것은 현재 토론 #1
에 포함되어 있다https://github.com/vic/happy#happy-태그
v1.3.0
가 완벽해 보이는데 다음에 기회가 되면 테스트해 보겠습니다. 문제가 발견되지 않으면 닫겠습니다.:-)토론 #2
에서 버그가 발견되었습니다. 여기에토론 #셋
: @happy {redirect, redirect_to} = case Map.get(params, "redirect", nil) do
"show" -> {"show", permissions_path(conn, :show, uid, name)}
_ -> {nil, permissions_path(conn, :index, uid)}
end
오류가 발생했습니다.== Compilation error on file web/controllers/auth/permissions_controller.ex ==
** (ArgumentError) expected 0 or 1 argument for @happy, got: 2
(elixir) lib/kernel.ex:2381: Kernel.do_at/4
(elixir) expanding macro: Kernel.@/1
web/controllers/auth/permissions_controller.ex:52: MyServer.Auth.PermissionsController.create/2
(elixir) expanding macro: Kernel.|>/2
web/controllers/auth/permissions_controller.ex:48: MyServer.Auth.PermissionsController.create/2
(elixir) expanding macro: Kernel.|>/2
web/controllers/auth/permissions_controller.ex:48: MyServer.Auth.PermissionsController.create/2
(elixir) expanding macro: Kernel.|>/2
web/controllers/auth/permissions_controller.ex:48: MyServer.Auth.PermissionsController.create/2
expanding macro: Happy.happy_path!/1
web/controllers/auth/permissions_controller.ex:48: MyServer.Auth.PermissionsController.create/2
(elixir) lib/kernel/parallel_compiler.ex:116: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1
같은 오류이므로 #6과 관련이 있는 것 같습니다.@happy
몇 가지 테스트:iex> defmodule Testering do def t(), do: (quote do happy_path! do {a, b} = case a_var do true -> {:a, :b}; _ -> {:c, :d} end end end |> Macro.expand(__ENV__) |> Macro.to_string) end; Testering.t()
"{a, b} = case(a_var) do\n true ->\n {:a, :b}\n _ ->\n {:c, :d}\nend"
iex> defmodule Testering do def t(), do: (quote do happy_path! do @happy {a, b} = case a_var do true -> {:a, :b}; _ -> {:c, :d} end end end |> Macro.expand(__ENV__) |> Macro.to_string) end; Testering.t()
** (ArgumentError) expected 0 or 1 argument for @happy, got: 2
(elixir) lib/kernel.ex:2381: Kernel.do_at/4
(elixir) expanding macro: Kernel.@/1
iex: Testering.t/0
iex> defmodule Testering do def t(), do: (quote do happy_path! do @blahblah {a, b} = case a_var do true -> {:a, :b}; _ -> {:c, :d} end end end |> Macro.expand(__ENV__) |> Macro.to_string) end; Testering.t()
** (ArgumentError) expected 0 or 1 argument for @blahblah, got: 2
(elixir) lib/kernel.ex:2381: Kernel.do_at/4
(elixir) expanding macro: Kernel.@/1
iex: Testering.t/0
편집:추가:iex> defmodule Testering do def t(), do: (quote do happy_path! do @happy {a, b} = {:c, :d} end end |> Macro.expand(__ENV__) |> Macro.to_string) end; Testering.t()
** (ArgumentError) cannot set attribute @happy inside function/macro
(elixir) lib/kernel.ex:2336: Kernel.do_at/4
(elixir) expanding macro: Kernel.@/1
iex: Testering.t/0
어쩌면 iex의 이상한 점일지도 몰라...
Reference
이 문제에 관하여(한 줄의 즐거움 테스트를 닫을 수 있다면 매우 유용할 것이다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/vic/happy/issues/5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)