标签: elixir

Elixir标点符号替换正则表达式

我正试图从字符串中删除所有标点符号

String.replace(sentence, ~r[\p{P}\p{S}], "")
Run Code Online (Sandbox Code Playgroud)

然而,它并没有删除所有标点符号!作为说明性示例:

iex(1)> String.replace("foo!&^%$?", ~r[\p{P}\p{S}], "")
"foo!?"
Run Code Online (Sandbox Code Playgroud)

我该怎么用?

regex elixir

8
推荐指数
1
解决办法
2415
查看次数

如何在Phoenix的Ecto模型中获得PostgreSQL哈希值?

我想在我的Ecto模型中定义一个PostgreSQL-Hash类型字段,但我不知道该怎么做.我还没有找到关于这个主题的明确指南,我假设它隐藏在这里:http://hexdocs.pm/ecto/Ecto.Schema.html

有没有人明确指导在Ecto中做PostgreSQL-Hash字段?

postgresql elixir ecto phoenix-framework

8
推荐指数
1
解决办法
415
查看次数

在Plug.Router中,init函数有什么意义?

试图了解Plug,特别是Plug.Router.从文档(http://hexdocs.pm/plug/Plug.Router.html).从规范插件有一个init函数,在初始化时调用以传入选项,但那些似乎在定义的路由中不可用.

没有可用选项的原因是什么,是否有允许它的模式?

elixir

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

如何在路由器之前添加插件Elixir/Phoenix?

有没有办法在路由器选择控制器/动作之前插入一个Plug来运行?我有一个应用程序将重定向到特定子域的根路径,无论这些域上的当前路径如何.所以:

sub.myapp.com/foo/bar 应该重定向到 sub.myapp.com/

但是,默认情况下,路由器说没有路径/foo/bar,它会停止执行我的插件,这意味着它永远不会达到我的重定向.

有没有办法在路由器选择动作/控制器之前插入我的插头?

(注意:我很确定我能用一条全能的路线处理这个案例,但我只是好奇是否有更好的方法.)

elixir phoenix-framework

8
推荐指数
1
解决办法
743
查看次数

如何在Elixir中打印PID?

我试过了:

pid = spawn fn -> 1 + 2 end
IO.puts(pid)
IO.puts(IO.inspect(pid))
Run Code Online (Sandbox Code Playgroud)

并且都给了一个

** (Protocol.UndefinedError) protocol String.Chars not implemented for #PID<0.59.0>
Run Code Online (Sandbox Code Playgroud)

必须有一种方法来获得"#PID <0.59.0>"的表示pid,因为REPL打印出来#PID<0.59.0>.

elixir

8
推荐指数
3
解决办法
4285
查看次数

如何在Ecto的迁移中运行更新?

我在我的一个项目中使用PhoenixEcto.

我想在一个表中添加一个列,我希望它是一个NOT NULL列.但是我已经有了一些已存在的数据,所以我决定添加列,将所有行更新为某个值并将列修改为NOT NULL.

我尝试了这两个代码:

  # solution 1
  def up do
    alter table(:channels) do
      add :type, :integer
      Exchat.Repo.update_all("channels", set: [type: 1])
      modify :type, :integer, null: false
    end
  end

  # solution 2
  def up do
    alter table(:channels) do
      add :type, :integer
    end
    Exchat.Repo.update_all("channels", set: [type: 1])
    alter table(:channels) do
      modify :type, :integer, null: false
    end
  end
Run Code Online (Sandbox Code Playgroud)

他们两个都没有工作,我得到的错误如下:

23::40::07.514 [info]  == Running Exchat.Repo.Migrations.AddTypeToChannels.up/0 forward

23::40::07.541 [debug] UPDATE "channels" AS c0 SET "type" = $1 …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

8
推荐指数
1
解决办法
3050
查看次数

如何理解编译的Elixir Erlang函数名

在ExProf中,Elixir函数名称在编译后打印出我假设的Erlang名称.一个例子是

Enum.reduce/3
Run Code Online (Sandbox Code Playgroud)

印刷为

'Elixir.Enum':'-reduce/3-lists^foldl/2-0-'/3
Run Code Online (Sandbox Code Playgroud)

我该如何解析这个字符串?这个-lists^foldl/2-0-部分来自哪里?为什么有多个/3?为什么有些名字有-前缀?什么^意思?为什么2-0-

elixir

8
推荐指数
1
解决办法
424
查看次数

如何在Elixir中按关键字拆分列表

假设我有一个单词列表,其中一个关键字,在这种情况下是"停止",划分完整的句子:

["Hello", "from", "Paris", "stop", "Weather", "is", "sunny", "stop", "Missing", "you", "stop"]
Run Code Online (Sandbox Code Playgroud)

我想变成:

[["Hello", "from", "Paris"], ["Weather", "is", "sunny"], ["Missing", "you"]]
Run Code Online (Sandbox Code Playgroud)

我知道我可以用String.split的字符串做到这一点,但理想情况下我想学习如何用基本的功能结构解决上述问题,比如[head | tail]等的递归,但我无法弄清楚在哪里去开始如何累积中间列表.

elixir

8
推荐指数
2
解决办法
591
查看次数

在Elixir中排序日期列表

我整理了一个小脚本来帮助我完成伤病恢复过程.它输出了我的预期,但是日期看起来并没有像我期望的那样排序 - 看起来按月/日排序是有效的,但不是按年.如果我只排序日期列表而不使用结构,则结果相同.

附注,使用https://github.com/lau/calendar填充我的日期范围.

defmodule Phase do
  defstruct day: "", weight: "" 
end

defmodule Recovery do
  alias Calendar.Date

  def phases(start_date, end_date, start_weight, increase_by) do
    # Get the range of dates
    date_range = Date.days_after_until(start_date, end_date, true) |> Enum.to_list

    # build all phases, starting at day 0
    values = do_phases(date_range, [], start_weight, increase_by)
    Enum.sort_by(values, &(&1.day))
  end

  defp do_phases([], recovery_plan, _weight, _increase_by), do: recovery_plan 
  defp do_phases([head | tail], recovery_plan, weight, increase_by) do
    v = [%Phase{day: head, weight: weight} | recovery_plan]
    do_phases(tail, …
Run Code Online (Sandbox Code Playgroud)

sorting calendar date elixir

8
推荐指数
1
解决办法
2236
查看次数

检查模块是否实现了行为

我有一个行为和一个函数,它采用应该实现该行为的模块列表。我想检查传入的每个模块是否确实实现了该行为。我可以用MyBehaviour.implemented_by?/1下面的方法做到这一点,但我想知道是否有更直接的方法。

defmodule MyBehaviour do
  @callback do_something(String.t(), String.t()) :: no_return()

  def implemented_by?(module) do
    :attributes
    |> module.module_info()
    |> Enum.member?({:behaviour, [__MODULE__]})
  end
end
Run Code Online (Sandbox Code Playgroud)

这是检查的最好方法吗?我在文档或 Elixir 论坛或任何地方都找不到任何内容。

我应该检查一下吗?或者我应该让责任完全落在来电者身上?行为是否更多是关于“我想确保我实现所有需要的东西”而不是“我希望其他人知道我实现了所有需要的东西”?

有没有办法在 typespecs 中使用行为作为类型?我的函数规范可以说 args 应该实现我的行为,还是应该只使用module()/atom()

elixir

8
推荐指数
1
解决办法
891
查看次数

标签 统计

elixir ×10

phoenix-framework ×3

ecto ×2

calendar ×1

date ×1

postgresql ×1

regex ×1

sorting ×1