我正试图从字符串中删除所有标点符号
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)
我该怎么用?
我想在我的Ecto模型中定义一个PostgreSQL-Hash类型字段,但我不知道该怎么做.我还没有找到关于这个主题的明确指南,我假设它隐藏在这里:http://hexdocs.pm/ecto/Ecto.Schema.html
有没有人明确指导在Ecto中做PostgreSQL-Hash字段?
试图了解Plug,特别是Plug.Router.从文档(http://hexdocs.pm/plug/Plug.Router.html).从规范插件有一个init函数,在初始化时调用以传入选项,但那些似乎在定义的路由中不可用.
没有可用选项的原因是什么,是否有允许它的模式?
有没有办法在路由器选择控制器/动作之前插入一个Plug来运行?我有一个应用程序将重定向到特定子域的根路径,无论这些域上的当前路径如何.所以:
sub.myapp.com/foo/bar 应该重定向到 sub.myapp.com/
但是,默认情况下,路由器说没有路径/foo/bar,它会停止执行我的插件,这意味着它永远不会达到我的重定向.
有没有办法在路由器选择动作/控制器之前插入我的插头?
(注意:我很确定我能用一条全能的路线处理这个案例,但我只是好奇是否有更好的方法.)
我试过了:
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>.
我想在一个表中添加一个列,我希望它是一个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) 在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-?
假设我有一个单词列表,其中一个关键字,在这种情况下是"停止",划分完整的句子:
["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]等的递归,但我无法弄清楚在哪里去开始如何累积中间列表.
我整理了一个小脚本来帮助我完成伤病恢复过程.它输出了我的预期,但是日期看起来并没有像我期望的那样排序 - 看起来按月/日排序是有效的,但不是按年.如果我只排序日期列表而不使用结构,则结果相同.
附注,使用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) 我有一个行为和一个函数,它采用应该实现该行为的模块列表。我想检查传入的每个模块是否确实实现了该行为。我可以用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()?