标签: elixir

为什么有一个原子类型很有用(比如elixir,erlang)?

根据http://elixir-lang.org/getting-started/basic-types.html#atoms:

原子是常量,其名称是它们自己的值.其他一些语言称这些符号

我想知道原子类型有什么意义.可能有助于构建解析器或宏?但在日常使用中它对程序员有何帮助?

BTW:永远不要使用elixir或erlang,只需注意它存在(也在kdb中)

syntax erlang elixir

19
推荐指数
2
解决办法
4063
查看次数

如何比较Elixir和Ecto的日期

我有一个Ecto.DateTime来自数据库列的实例,我需要检查这个日期是否超过5分钟.

最好的方法是什么?

为了更清楚,这是我在ruby中所需要的 - >

updated_at < (Time.now - 5.minutes)
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

19
推荐指数
1
解决办法
2715
查看次数

为什么Elixir在Ruby和Go中解决Project Euler#5的速度最慢?

更新:Elixir并不慢,我的算法是.我的算法甚至不是苹果对比.有关Ruby和Go等效算法,请参阅下面的Roman答案.还要感谢José,我的慢速算法可以通过添加前缀MIX_ENV = prod来显着加快.我已经更新了问题中的统计数据.

原始问题: 我正在研究多种语言的Project Euler问题,只是为了了解语言的效率和速度.在问题#5中,我们被要求找到可被1到20的所有数字整除的最小正数.

我用多种语言实现了该解决方案.以下是统计数据:

  1. 去1.4.2:0.58s
  2. Ruby 2.2 MRI:6.7s
  3. Elixir 1.0.5(我的第一个算法):57s
  4. Elixir 1.0.5(我的第一个算法,MIX_ENV = prod前缀):7.4s
  5. Elixir 1.0.5(Roman的Go等效算法):0.7s
  6. Elixir 1.0.5(Roman的Ruby等效算法):1.8s

为什么Elixir的表现如此之慢?我尝试在所有语言中使用相同的优化.警告:我是FP和Elixir新手.

我有什么办法可以改善Elixir的表现吗?如果您使用任何分析工具来找出更好的解决方案,请将它们包含在响应中吗?

在Go:

func problem005() int {
  i := 20
outer:
  for {
    for j := 20; j > 0; j-- {
      if i%j != 0 {
        i = i + 20
        continue outer
      }
    }
    return i
  }
  panic("Should have found a solution by now")
}
Run Code Online (Sandbox Code Playgroud)

在Ruby中:

def self.problem005
  divisors = (1..20).to_a.reverse

  number = 20 …
Run Code Online (Sandbox Code Playgroud)

performance elixir numerical-computing

19
推荐指数
2
解决办法
7349
查看次数

生产环境中的Mix.env/0等价物?

Mix.env/0正常工作mix phoenix.server,但无法在使用exrm构建的生产环境中调用.这是有意义的,因为mix不包含在发布版本中,但有没有相当于Mix.env/0?

(UndefinedFunctionError) undefined function Mix.env/0 (module Mix is not available)
Run Code Online (Sandbox Code Playgroud)

我在一些代码中使用了这样的Mix.env/0:

if Mix.env == :dev do
  # xxxxxx
else
  # xxxxxx
end
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

19
推荐指数
1
解决办法
4330
查看次数

如何将Elixir库加载到iex而不将其添加到项目的mix.exs deps中?

我想在没有创建混合项目的情况下试用Poison json模块.

如何安装并通过导入使其在iex中可用?

我已经能够将它添加到项目中,然后在进入项目目录并使用iex -S mix后使用它:

tbrowne@LILJEN:~/code/elixirTry/pj$ cat mix.exs
defmodule Pj.Mixfile do
  use Mix.Project

  def project do
    [app: :pj,
     version: "0.0.1",
     elixir: "~> 1.2",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type "mix help compile.app" for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  # …
Run Code Online (Sandbox Code Playgroud)

elixir

19
推荐指数
4
解决办法
1万
查看次数

elixir - 如何获取列表中除最后一个之外的所有元素?

假设我有一个清单 [1, 2, 3, 4]

除了最后一个,如何从此列表中获取所有元素?所以,我会的[1, 2, 3]

elixir

19
推荐指数
3
解决办法
4564
查看次数

如何调用Enum.map中的模块函数而不会出现"未定义的引用"错误?

我有一个包含单个函数的简单模块:

defmodule Funcs do

  def double(x) do
    x*2
  end

end
Run Code Online (Sandbox Code Playgroud)

当我iex以文件名作为参数开始时,我可以调用该函数:

iex(5)> Funcs.double(3)
6
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用它时Enum.map,我收到一个undefined function错误:

iex(2)> Enum.map([1,2,3,4], Funcs.double)
** (UndefinedFunctionError) undefined function: Funcs.double/0
    Funcs.double()
Run Code Online (Sandbox Code Playgroud)

而如果我只使用类似的匿名函数,一切都按预期工作:

iex(6)> Enum.map([1,2,3,4], fn(x) -> x*2; end)
[2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)

如何使用模块函数(不确定这是否是正确的术语)作为Enum.map的参数?

elixir

18
推荐指数
1
解决办法
4523
查看次数

"@type t ::%__ MODULE __ {}"在Elixir中意味着什么

在std Elixir包中有很多行

@type t :: %__MODULE__{}
Run Code Online (Sandbox Code Playgroud)

我知道@type注释用于注释注释中类型的短符号@spec,但是这一行用于诸如uri.ex之类的模块中,它根本没有@spec注释.

这个注释的目的是什么?

elixir

18
推荐指数
1
解决办法
3535
查看次数

禁用Elixir Ecto Debug输出

无论在iex>或使用mix run -e "My.code"当我运行使用外生混合项目中,外生的调试机制显示像下面一堆sql语句的

16:42:12.870 [debug] SELECT a0.`id` FROM `account` AS a0 WHERE (a0.`account_name` = ?) ["71000000313"] (39.6ms)`
...
Run Code Online (Sandbox Code Playgroud)

当我不再需要调试输出时,如何关闭它,我找不到任何关于如何更改ecto日志级别的东西.

提前致谢.

debugging elixir ecto

18
推荐指数
4
解决办法
7278
查看次数

如何在Phoenixframework中使用RethinkDB?

刚到Elixir/Phoenix我想使用RethinkDB而不是PostgreSQL,但我只在PostgreSQL上找到文档/示例(它似乎是默认/官方数据库).Hamiltop(Rethinkdb-elixir)提供了一个非常好的软件包,但遗憾的是Wiki中的文档还没有准备就绪,而自述文件对我来说还不够.我绝对不想使用SQL(我来自使用Meteor/MongoDB,其中数据库不是问题).谁能告诉我一个我需要的代码的简单示例:

  1. 连接到RethinkDB;
  2. 启动服务器/管理服务器/连接;
  3. 创建数据库/表;
  4. 执行基本的CRUD操作.

这可能听起来很傻但是Meteor为我们照顾这些,现在这对我来说是一个问题...因为我无法正确地做到这一点.谢谢!

elixir rethinkdb ecto phoenix-framework

18
推荐指数
1
解决办法
1812
查看次数