我有一个语法错误,我不知道它来自哪里。这是我的函数(在persona_from_auth.ex中):
# find or create the user.
# if you login with oauth2, your account will auto created
def find_or_create(%Auth{provider: :github} = auth) do
with
{:notfound} <- check_github_email(auth.info.email),
{:notfound} <- check_google_email(auth.info.email)
do
create(auth)
else
{:ok, persona} -> update(auth, persona)
end
end
这会返回以下错误:
== Compilation error on file web/models/persona_from_auth.ex ==
** (SyntaxError) web/models/persona_from_auth.ex:18: syntax error before: do
(elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1
第18行是create()调用之前的行。
我检查了正确的灵丹妙药版本。在mix.exs中我得到了1.2,我将其改为1.4.2,但仍然是同样的错误。编译是否仍然可以使用1.2?我该如何检查?
答案 0 :(得分:3)
with
之后的第一个语句必须位于同一行,或者参数必须位于括号中,否则Elixir认为您正在尝试调用with/0
,然后是以下行没有意义,导致语法错误。
以下任何一种都应该有效:
with {:notfound} <- check_github_email(auth.info.email),
{:notfound} <- check_google_email(auth.info.email))
do
with(
{:notfound} <- check_github_email(auth.info.email),
{:notfound} <- check_google_email(auth.info.email)
) do