标签: elixir

Elixir有垃圾收集器吗?

我开始阅读有关Elixir编程语言的内容.

我明白那个:

  1. 它是功能性的
  2. 它是动态的,但支持@spec
  3. 它基于Erlang VM

我的问题是:它有一种GC吗?

elixir

13
推荐指数
1
解决办法
2559
查看次数

无法在Phoenix控制器和/或模板中获取配置值

我正在尝试从控制器中的Phoenix配置文件中获取值.

# config.exs

use Mix.Config

config :app_name, AppName.Endpoint,
  url: [host: "localhost"],
  debug_errors: false,
  root: Path.expand("..", __DIR__)
Run Code Online (Sandbox Code Playgroud)

Application.get_env(:app_name, :url)例如,似乎什么也没有回报.

我错过了什么吗?

elixir phoenix-framework

13
推荐指数
1
解决办法
1614
查看次数

使用jquery ajax post在Phoenix Framework中提交POST请求

我们希望使用我们的内容可编辑,利用router.ex中生成的以下路由:

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :put_secure_browser_headers
  end

  pipeline :api do
    plug :accepts, ["json"]
  end
  scope "/", TextEditor do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    resources "/posts", PostController
  end
Run Code Online (Sandbox Code Playgroud)

和控制器功能,即创建:

  def create(conn, %{"post" => post_params}) do
    changeset = Post.changeset(%Post{}, post_params)

    case Repo.insert(changeset) do
      {:ok, _post} ->
        conn
        |> put_flash(:info, "Post created successfully.")
        |> redirect(to: post_path(conn, :index))
      {:error, changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end
Run Code Online (Sandbox Code Playgroud)

但是我们不想使用生成的表单,然后我们尝试使用div和jquery方法$ .post来测试它:

<div …
Run Code Online (Sandbox Code Playgroud)

ajax jquery elixir phoenix-framework

13
推荐指数
1
解决办法
4721
查看次数

Elixir:允许重新绑定变量的基本原理

当Erlang不允许时,允许在Elixir中重新绑定变量的原因是什么?

erlang elixir

13
推荐指数
3
解决办法
670
查看次数

如何在凤凰城中将Ecto选择查询转换为结构?

我有两个模型,歌曲和投票,歌曲有很多票.我想选择所有歌曲并计算每张歌曲的票数.

使用mix gen任务生成的SongController中的索引操作已修改为:

def index(conn, _params) do
  query = from s in Song, select: %{id: s.id, name: s.name, artist: s.artist} 
  songs = Repo.all(query)
  render(conn, "index.html", songs: songs)
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下songs包含列表列表.但是在原始的生成函数中,songs = Repo.all(Song)它是一个Song结构列表.

这意味着模板中的song_path函数会出现以下错误消息: maps cannot be converted to_param. A struct was expected, got: %{artist: "Stephen", id: 3, name: "Crossfire"}

当然,我真正想做的是以某种方式num_votes在select语句中添加一个字段,然后以某种方式为Song结构创建一个相应的字段?

elixir ecto phoenix-framework

13
推荐指数
1
解决办法
4453
查看次数

Elixir中的斜线符号是什么意思?

在Elixir文档中,他们继续使用带有斜杠的奇数表示法,例如:

is_boolean/1
IO.puts/1
String.length/1
is_function/2
++/2
Run Code Online (Sandbox Code Playgroud)

我只是猜测,但我认为它指的是arity.但如果是这样的话,为什么魔鬼不是在文档的任何地方提到的?这并不是说这是IT中的任何标准惯例(至少,在我20多年的IT期间,我从未见过).

elixir

13
推荐指数
2
解决办法
1462
查看次数

Elixir assert_raise不会捕获异常

我写了这个测试用例:

assert_raise ArgumentError, myFn(a,b)
Run Code Online (Sandbox Code Playgroud)

但它没有以我期望的方式评估.myFn引发一个ArgumentError(do: raise ArgumentError),但它没有被捕获assert_raise.

文档中的示例工作得很好:

assert_raise ArithmeticError, fn ->
  1 + "test"
end
Run Code Online (Sandbox Code Playgroud)

从文档:

assert_raise(exception, function)
断言exceptionfunction执行期间引发.返回已获救的异常,否则失败

我猜测在我的测试用例中,首先评估参数.但是我该怎么写呢?

elixir ex-unit

13
推荐指数
1
解决办法
2251
查看次数

Elixir:模式匹配对于元组和映射的工作方式不同

在Elixir中,如果我尝试模式匹配以下两个元组:

{a} = {1, 2}
Run Code Online (Sandbox Code Playgroud)

我得到一个匹配错误.但如果我对两张地图做同样的事情:

%{x: a} = %{x: 1, y: 2}
Run Code Online (Sandbox Code Playgroud)

它工作正常,并a绑定到1.我可以看到为什么匹配这两个元组给出了一个错误,但为什么匹配地图不会出错?

dictionary tuples elixir pattern-matching

12
推荐指数
2
解决办法
1万
查看次数

在elixir中,如何在全球范围内安装软件包?

我可以使用mix来全局安装一些软件包吗?我想类似行为npm的全局选项或gem的安装-这可能是因为我到处使用像包有用csvyaml.

elixir-mix elixir

12
推荐指数
2
解决办法
2644
查看次数

监督的GenServer没有重启?

我缩小了问题的大小,因为它太大了.这是代码:

defmodule MayRaiseGenServer do
  use GenServer

  def start_link do
    IO.puts "started MyServer, name is #{__MODULE__}"

    GenServer.start_link(__MODULE__, [], name: __MODULE__)
  end

  def maybe_will_raise do
    GenServer.call(__MODULE__, :maybe_will_raise)
  end

  def handle_call(:maybe_will_raise,_from, state) do
    IO.puts "maybe_will_raise called!"
    :random.seed(:erlang.now)
    number = Enum.to_list(1..100) |> Enum.shuffle |> List.first
    IO.puts "number is #{number}"
    if rem(number,2) != 0 do
      raise "#{number}"
    end
    {:reply, {"You got lucky"}, state}
  end
end

defmodule MayRaiseSupervisor do
  use Supervisor

  def start_link([]) do
    IO.puts "starting supervisor, name is #{__MODULE__}"
    Supervisor.start_link(__MODULE__, [])
  end

  def init(arg) do …
Run Code Online (Sandbox Code Playgroud)

elixir erlang-otp

12
推荐指数
1
解决办法
834
查看次数