标签: elixir

elixir:定义map/hashdicts的类型规范

在使用泛型的静态类型语言(如C#)中,我可以在方法签名中指定每个映射的键都是一个原子,每个值都是{string,int}元组的列表.如何为Elixir中的函数参数定义类型规范?

PS:如果你正在读这个并且评级> 1500,请你创建一个类型规范标签.

generics types static-analysis elixir

9
推荐指数
1
解决办法
3221
查看次数

在elixir中连接元组

在elixir中,我们可以连接,列表就像这样

 ex(52)> [1,2,3,4] ++ [5,6,7]
 [1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我们还可以连接元组吗?像这样的东西?

iex(53)> {1,2,3,4} ++ {5,6,7}
 ** (ArgumentError) argument error
    :erlang.++({1, 2, 3, 4}, {5, 6, 7})
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一另一件事是将元组转换为列表,然后使用to_listto_tuple函数转换回元组.但那太笨拙了.

elixir

9
推荐指数
1
解决办法
2539
查看次数

Elixir NIF- x64 Mac OSX上的Hello World示例

嗨,我正在尝试获取Erlang NIF(本机实现函数)的Hello World示例,这里显示的是 http://www.erlang.org/doc/man/erl_nif.html ,可以在OSX 64位上使用Elixir.

首先我创建C代码:

/* niftest.c */
#include "erl_nif.h"

static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    return enif_make_string(env, "Hello world!", ERL_NIF_LATIN1);
}

static ErlNifFunc nif_funcs[] =
{
    {"hello", 0, hello}
};

ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
Run Code Online (Sandbox Code Playgroud)

然后我使用gcc64位架构成功编译它,如 Erlang NIF测试 - OS X Lion所示

gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include
Run Code Online (Sandbox Code Playgroud)

它产生了niftest.so我应该能够从Erlang/Elixir接口的必要文件.我的Elixir(niftest.ex)看起来像这样(灵感来自这里报告的更复杂的例子):

defmodule Niftest do
 @onload :init
  def init() do
    :erlang.load_nif("./niftest", 0)
    :ok
  end

  def hello() do …
Run Code Online (Sandbox Code Playgroud)

macos erlang native elixir erlang-nif

9
推荐指数
1
解决办法
765
查看次数

Elixir中的双下划线功能

有一些双下划线函数__before_compile__,在Elixir中编译时自动调用.但是,我也看到了许多双下划线__functions__,似乎没有神奇的要求.例如,在Ecto中,调用以下函数

    Ecto.Schema.__source__(source),
    Ecto.Schema.__fields__(fields),
    Ecto.Schema.__assocs__(assocs),
    Ecto.Schema.__primary_key__(primary_key_field),
Run Code Online (Sandbox Code Playgroud)

什么是合格的__functions__,有双重下划线?

ps:在jose的回答之后将'methods'重命名为'functions'.方法是一个oop术语,在这里不合适.

elixir

9
推荐指数
1
解决办法
468
查看次数

Phoenix Ecto如何处理NoResultsError

在我的Phoenix JSON API中,当我请求数据库中不存在的对象时,我收到了一个Ecto NoResultsError.

我希望我的JSON API返回null以及404错误.

我该怎么做?

目前我几乎有一个默认生成的html控制器/视图等我已经修改了这样的控制器:

def show(conn, %{"id" => id}) do
  my_model = Repo.get!(MyModel, id)
  case get_format(conn) do
    "json" ->
      render(conn, my_model: my_model)
    _ ->
      render(conn, "show.html", my_model: my_model)
  end
end
Run Code Online (Sandbox Code Playgroud)

以及观点:

defmodule MyProject.MyModelView do
  use Laired.Web, :view

  def render("show.json", %{my_model: my_model}) do
    my_model
  end
end
Run Code Online (Sandbox Code Playgroud)

有关:

在Phoenix Application中为异常设置自定义响应

json elixir ecto phoenix-framework

9
推荐指数
1
解决办法
2671
查看次数

在由OR连接的where子句中组成具有多个列的Ecto查询

假设我有这个问题:

User
|> where([u], u.name == "John" or u.age == 24)
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个函数,可以获取字段名称和字段值的关键字列表,并动态生成相同的查询.函数定义看起来像这样:

def where_any(query, field_names_to_values) do
  ...
end
Run Code Online (Sandbox Code Playgroud)

Elixir和Ecto有可能吗?

elixir ecto

9
推荐指数
1
解决办法
1426
查看次数

协议Ecto.Queryable未实现

我正在尝试将Guardian实现到我的API中并通过它执行登录以获得JWT.我正在看的教程就在这里.问题是使用类似于他们在示例中使用的用户模型实现登录.Model代码如下所示:

defmodule PushflightServer.User do
  use PushflightServer.Web, :model

use Ecto.Repo
import Ecto.Query
  alias PushflightServer.Repo

  schema "users" do
    field :name, :string
    field :email, :string
    field :encrypted_password, :string
    field :password, :string, virtual: true
    field :verify_token, :string
    field :verify_date, Ecto.DateTime

    timestamps
  end

  def from_email(nil), do: { :error, :not_found }
  def from_email(email) do
    IO.write("Before email")
    IO.inspect(email)
    Repo.one(User, email: email)
  end
Run Code Online (Sandbox Code Playgroud)

如果我从Phoenix内部或直接在iex -S mix调用from_email,我会收到以下错误:

user = PushflightServer.User.from_email("rob@json.com")

**(Protocol.UndefinedError)协议Ecto.Queryable没有为User实现,给定的模块不存在(ecto)lib/ecto/queryable.ex:33:Ecto.Queryable.Atom.to_query/1(ecto)lib/ecto /repo/queryable.ex:90:Ecto.Repo.Queryable.execute/5(ecto)lib/ecto/repo/queryable.ex:15:Ecto.Repo.Queryable.all/4(ecto)lib/ecto/repo /queryable.ex:44:Ecto.Repo.Queryable.one/4

我必须遗漏一些简单的东西,但我无法找到有关为什么会发生这种情况的任何文档.使用Repo插入数据工作正常.有任何想法吗?

elixir ecto phoenix-framework

9
推荐指数
1
解决办法
8511
查看次数

Elixir ExUnit:被测模块不可用

我正在关注本教程:http://elixir-lang.org/getting-started/mix-otp/agent.html

所以在我的Elixir项目中,我有一个模块lib/kv/bucket.exs,并对它进行测试test/kv/bucket_test.exs.

当我运行混合测试时,我收到以下错误:** (UndefinedFunctionError) undefined function KV.Bucket.start_link/0 (module KV.Bucket is not available)我错过了什么?

elixir-mix elixir

9
推荐指数
1
解决办法
1563
查看次数

Elixir案例在一条线上

我想在一行上有以下案例:

case s do
  :a -> :b
  :b -> :a
end
Run Code Online (Sandbox Code Playgroud)

case被定义为case(condition, clauses).下列

quote do
  case s do
    :a -> :b
    :b -> :a
  end
end
Run Code Online (Sandbox Code Playgroud)

得到:

{:case, [],
 [{:s, [], Elixir}, [do: [{:->, [], [[:a], :b]}, {:->, [], [[:b], :a]}]]]}
Run Code Online (Sandbox Code Playgroud)

从这里应该可以回到 case(s, ???)

elixir

9
推荐指数
2
解决办法
1731
查看次数

Edeliver在随机TCP端口上启动Phoenix/Elixir应用程序

我们正在尝试将我们的Phoenix Web App部署到Linux VM(在我们的Azure案例中)使用edeliver 我们已经使用Azure部署了一个"基本"博客应用程序,edeliver记录了以下步骤:https: //github.com/dwyl/learn-微软蔚蓝#部分2 -部署-您的应用程序

当我们手动运行(" ")的应用程序:https://github.com/nelsonic/healthlocker 使用上的实例MIX_ENV=prod mix phoenix.server运行良好!

当我们使用以下命令将应用程序部署并运行到Azure实例时:

mix edeliver build release --verbose
mix edeliver deploy release to production
mix edeliver start production
Run Code Online (Sandbox Code Playgroud)

我们收到一条肯定的确认消息:

EDELIVER HEALTHLOCKER WITH START COMMAND

-----> starting production servers

production node:

  user    : root
  host    : 51.140.86.5
  path    : /home/hladmin
  response: ok


START DONE!
Run Code Online (Sandbox Code Playgroud)

但是当我们netstat -plnt按照check-running-services-on-linux的 …

deployment elixir azure phoenix-framework edeliver

9
推荐指数
1
解决办法
158
查看次数