为什么匹配?在所需模式存储在变量中时停止匹配?i、 e:
iex> match?(%{a: 1}, %{a: 1}) # true
iex> match?(%{a: 1}, %{a: 1, b: 2}) # true
iex> pattern = %{a: 1}
iex> match?(^pattern, %{a: 1}) # true
iex> match?(^pattern, %{a: 1, b: 2}) # false, why?
请注意匹配?的第一个参数中
我在Windows8上使用Elixir的Phoenix框架时遇到了严重问题。在克服了大多数特定于平台的bug之后,一个错误告诉我无法找到钢筋,并且没有编译ranch。我甚至在我的环境道路上铺设了钢筋,但它仍然在抱怨。总之,我应该如何编译ranch,下面是一个错误示例
Programming PC@PROGRAMMING-PC ~/Documents/GitHub/Elixir/phoenix ((v0.6.1))
$mix phoenix.new newapp ~/newapp
'c:/Prog
在Elixir中,如何检查Python中的类型:
>>> a = "test"
>>> type(a)
<type 'str'>
>>> b =10
>>> type(b)
<type 'int'>
>a=“测试”
>>>类型(a)
>>>b=10
>>>类型(b)
我在Elixir中读到过一些类型检查器,如“is_bitstring”、“is_float”、“is_list”、“is_map”等
我知道可以通过%User{email:'blah@blah.com“}。但是如果我有一个变量params=%{email:'blah@blah.com“}是否有一种方法可以使用该变量创建该结构,例如,%User{params}
这会产生一个错误,只是想知道是否可以将其分解或其他方式?您应该使用该函数。从文档中:
defmodule User do
defstruct name: "john"
end
struct(User)
#=> %User{name: "john"}
opts
我有几个任务正在异步运行。根据输入,一个或多个任务可能会长时间运行,但只有一个任务会返回:success消息
slowtask = Task.async(slow())
fasttask = Task.async(fast())
如何在不必等待其他任务的情况下捕获上述两个任务中要完成的第一个任务?我尝试了Task.find/2,但因为它是用enum实现的,所以它似乎在找到ref/消息之前等待所有退出信号。我的另一个想法是在Stream.cycle中对此进行轮询,忽略仍处于活动状态的任务并捕获已
作为新的长生不老药,我在理解模式匹配方面遇到了一些问题
如果我有一个像这样的Elixir数据结构:
list_with_maps = [%{"id" => 1, "name" => "a"}, %{"id" => 2, "name" => "b"}]
defmodule Test do
def get_all_ids([head | tail ]) do
IO.puts head["id"]
get_all_ids(tail)
end
de
我希望一点一点地构造一个位字符串,我想知道如何做到这一点
我希望语法类似于连接两个字节,如下所示:
iex(1)> <<1>> <> <<1>>
<<1, 1>>
iex(1)>
所以我试着:
iex(2) <<1::1>> <> <<1::1>>
** (ArgumentError) argument error
iex(2)
**(Arg
当我想在windows上编译我的项目时,我的编译器权限被拒绝:
D:\Elixir\issues>iex -S mix
Eshell V7.2.1 (abort with ^G)
Compiled lib/issues.ex
Compiled lib/issues/github_issues.ex
Compiled lib/issues/cli.ex
** (EXIT from #PID<0.56.0>) an exception was raised:
** (Fi
标签: Elixir
phoenix-frameworkecto
我有多对多关联的银行和货币模式。我用select为银行创建了一个包含货币的表单
bank.ex
schema "banks" do
field :name, :string
many_to_many :currencies, App.Currency, join_through: "banks_currencies"
end
@required_fields ~w(name)
@optional_fields ~w()
def changeset(model, params \\ %
我有这样一个模式:
defmodule Ticketing.User do
use Ticketing.Web, :model
schema "users" do
field :first_name, :string
field :last_name, :string
field :email, :string
field :hashed_password, :string
field :password, :string, virtual: t
我想验证URI,如:
http://vk.com
http://semantic-ui.com/collections/menu.html
https://translate.yandex.ru/?text=poll&lang=en-ru
而不是
www.vk.com
abdeeej
http://vk
但是还没有找到它的本机代码实现包
我该怎么做呢?根据规范,所有这些都是技术上有效的URL,所以URI.parse/1为所有URL返回一个%URI{}结构,但是如果您想拒绝没有方案的域
我做了一个HTTPotion,收到了与此类似的响应
"{\"total\": 1564, \"businesses\": [{\"review_count\": 139}, {\"review_count\": 154}]}"
这是什么类型的数据?如何访问第一次审阅计数?这是json数据。您可以使用来解码它
iex()> response = "{\"total\": 1564, \"businesses\": [{\"review_count\": 139}, {\"review_co
我正在制作一个Elixir应用程序(使用GenServer),它在启动时生成一个外部Node.js服务器,并在退出时关闭它。我已成功启动Node.js服务器,但无法将其关闭。我目前已尝试使用:
及
及
甚至还有包裹
所以我的问题是,如何关闭我在Elixir中启动的外部进程?
在ElixirForum上好的,在研究并浏览了许多关于的电子邮件和讨论之后,结果是:
当进程退出(端口关闭)时,生成的程序/端口
应在其STDIN上获得EOF。这是进程检测端口何时关闭的“标准”方式:STDIN上的文件
我正在学习Elixir/Phoenix框架,希望学习如何部署到不允许创建额外数据库的主机。大多数教程都指示我运行mixecto.create来初始化它,但它似乎想要创建新的数据库。为了模拟主机设置,我尝试使用一个预先制作的用户创建一个自己的DB,然后运行mix-exto.migrate对其进行初始化。看起来不错:
$mix-exto.migrate
编译12个文件(.ex)
生成phoenix0应用程序
在那之后,mixephoenix.server启动,一切似乎都很好。我的问题:这足以运行P
我想从视图调用static_path来嵌入js脚本
def render("index.js", _) do
<script src="#{Conn.static_path(@conn, "/js/my_js.js")}"></script>
end
def render(“index.js”和u)do
结束
它说“找不到Conn.static_路径”。那么它的定义是什么呢?问题标题的答案是:
MyApp.Router.Helpers.static_p
我经常遇到这样的情况:为了正确地访问/转换数据,我必须以to_x函数的形式使用多个管道类型转换
例如
这似乎过于冗长。这是惯用的还是我在这里遗漏了一些基本的东西?我知道这是一个人为的例子,但是如果您需要多个类型转换,那么很可能是做错了。选项是选择适当的类型并在应用程序中使用它们
无论是否仍要执行许多管道转换,请为它们声明宏:
defmacro to_chars(arg) do
quote bind_quoted: [arg: arg] do
arg |> to_string |
标签: Elixir
phoenix-frameworkecto
我有下面的型号。我是否必须在强制转换中包含所有字段名,或者是否有任何默认方法将参数中的所有字段映射到模型
defmodule Chemical.Info do
use Chemical.Web, :model
schema "infos" do
field :title, :string
field :shortdesc, :string
field :longdesc, :string
field :images
我有子类别和类别的表格子类别属于类别,类别有许多子类别
在类别表中,有名称和子类别,它们是布尔值
我想做的是,当用户创建一个子类别时,它会检查是否有未分配的食物(这意味着食物没有分配给任何子类别),如果没有任何未分配的食物,它会将类别表的子类别值更新为真
def handle_in("create:subcategory", %{"name" => name, "category_id" => category_id}, socket) do
changeset = Subca
我有一个列表或数组。如何根据某些条件将其分解为2或N个子列表?我在文档中没有找到任何与此相关的内容。根据给定的函数将可枚举项拆分为两个列表:
Enum.split_with([5, 4, 3, 2, 1, 0], fn(x) -> rem(x, 2) == 0 end)
{[4, 2, 0], [5, 3, 1]}
或在旧版本的长生不老药中使用:
根据给定函数将可枚举项拆分为两个列表:
Enum.split_with([5, 4, 3, 2, 1, 0], fn(x) -> rem
这里有一个问题要问很多人。我得到的错误是
INSERT INTO "qbinders" ("title","typecode","inserted_at","updated_at","id") VALUES ($1,$2,$3,$4,$5) ["Math", "Jim1000", {{2017, 4, 1}, {15, 4, 47, 827009}}, {{2017, 4, 1}, {15, 4, 47, 843348}}, <<68, 1
49, 156, 219, 153, 21
标签: Elixir
phoenix-frameworkecto
我正在尝试从数据库中排序实体:
def index(conn, _params) do
items = Repo.all(MyModel)
|> Repo.preload(:model2)
|> Repo.preload(:model3)
|> Repo.order_by([x], desc: x.created_at)
但我有一个例外:未定义的函数x/0
如何修复它?Repo.all返回
让我们看看长生不老药中的以下表达式:
iex>对于n,对于n否,into只能用于收集到类型中。整数不可收集
您可以在此处使用Enum.sum/1,但您可能已经知道:
iex(1)> Enum.sum(for n <- 1..30, rem(n, 3) == 0, do: n * 10)
1650
编辑:整数可以通过加法来实现Collectable,但我不建议这样做,因为(1)这个实现是全局的,(2)没有明显的方法可以“收集”成整数,你也可以使用乘法而不是加法。不过,为了便于学习,下
我有多个包含类型为:utc\u datetime的字段的EXTO表模式。当我读取其中一个表时,我会返回:utc_DateTime列的exto.DateTime值。当使用这些值之一创建变更集以将其写回表中时,我在生成变更集的函数中包含了对|>cast(params,[:my_utc_datetime_field]的调用,但cast失败,错误设置为[my_utc_datetime_field:{“is invalid”,[type::utc_datetime,validation::cast]}
当
以下是我如何记录用户的ip地址:
{a, b, c, d} = conn.remote_ip
ip_addr = "#{a}.#{b}.#{c}.#{d}"
它始终是127.0.0.1,即使在生产环境中测试远程服务器时也是如此。发生什么事了
从nginx传递正确的头。您很可能在应用程序之前使用反向代理或负载平衡器(您可能应该这样做)
此系统将(代表客户端)与应用程序建立连接。由于它与应用程序在同一主机上运行,因此您将始终看到127.0.0.1作为远程主机
反向代理通常会插入HTTP头。通过从该
我需要更新我的资产表,所以我需要这样做
from(a in Asset,
where: a.id == ^asset.id,
update: [set: [asset_name: "a name"] ]
)
|> Repo.update_all([])
这可以正常工作,但是处的更新\u没有更新
从文件中:
请记住,此更新\u all不会更新自动生成的字段,如
更新的_位于列
这是否意味着,我需要将时间传递到我的查询中?类似于DateTime.utc\u now
谢谢是的,您需要自动更
例如,这将不起作用:
puts "hello"
"""
var1 = 123
var2 = "#{var3}" # exception!
"""
这将在运行时引发异常,即使代码应该作为注释被跳过。使用防止字符串插值的选项:
~S"""
var1 = 123
var2 = "#{var3}" # exception!
"""
默认情况下,Elixir会尝试插入所有二进制文件,包括注释。使用以下方法防止字符串插入:
~S"""
var1 = 123
var2 = "#{var3}
我正在根据99个问题列表做一些练习。对于P01,其目的是查找列表的最后一个元素,我的实现几乎总是优于list.last/1。差异约为20%,但执行之间的差异很大(有时超过100%)。测试是在一个新重启的VM上完成的,在一个包含一百万个元素的列表中,函数被称为10、100和1000
这是我的实现:
def p01([]), do: nil
def p01([h]), do: h
def p01([_ | r]), do: p01(r)
仔细查看列表。最后一个/1源代码显示了两个区别
编译器指令@
给定一个包含单个元素的长生不老药列表,如何最好地创建包含成对相邻元素的列表?
这应该适用于任何列表,而不仅仅是包含数字
输入:[1,2,3,4,5,6,7]
输出:[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]
下面的解决方案有效,但在我看来很笨拙
有没有更好/更简单的方法
> {[_|list],_} = Enum.map_reduce([1, 2, 3, 4, 5, 6, 7], nil, fn(x, acc) -> {[acc,x], x} e
在使用事件源/CQRS框架中的Commanded.ProcessManagers.ProcessManager模块实现saga模式时,我遇到了一个问题
在发票上下文中,我需要实现发票的批量创建机制。这种大规模的创作既是一个整体,也是一个传奇。聚合允许开始和完成批量创建。saga通过发出创建发票的命令并将其ID保持在saga状态来响应“批量创建已启动”事件。之后,saga通过监听它命令存在的发票实例的成功或失败事件来跟踪发票创建的状态。一旦每个invoice实例报告成功或失败,saga就会发出停止
在我的Phoenix应用程序中,我有一个控制器,其delete功能实际上不会从数据库中删除项目,而是将其存档,并插入一个:utc_datetime值,该值对应于项目被“删除”的日期时间。以下是函数:
def delete(conn, %{"id" => contact_id}) do
contact = Contact.get(contact_id)
case Contact.archive(contact) do
{:ok, _contact} ->
标签: Elixir
erlang-supervisorgen-server
我正在尝试创建一个动态主管来启动子进程。我使用三个模块来实现这一点,一个是主模块,第二个是动态管理器,第三个是genserver。我没有收到任何错误,但我无法看到任何子进程正在运行
这是我的密码。第一个是具有主方法的模块
defmodule Simulator do
def main(args) do
{:ok, super_pid} = PersonManager.start_link(args)
num_of_persons = 1
s
没有标准的lib函数允许在映射上执行map_values函数:
Map.Map_值%{a:30,b:45},fn v->v*2 end=%{a:60,b:90}
我发现最好的方法是:
Enum.map%{a:30,b:45},fn{k,v}->{k,map_fnv}|>Enum.into%{}
因为我经常使用它,所以我觉得它很重…另一种方法是理解
通过这种方式,您不会创建中间列表,因为Enum.map返回一个列表,然后需要将其转换为映射。
这里重要的部分是into:%{},因为如果您省略它,它将
(编辑:添加数据库表示和更新的试验)
在我们的数据库中,我们有一个成员和一个成员模式。一个会员有许多会员资格。会员资格包含开始日期和结束日期字段。我正在尝试查询具有多个成员资格的成员,并选择这些成员资格的开始日期和结束日期。我的问题是,有没有一种方法可以在不使用preload/3函数的情况下在一个查询调用中完成这项工作
我们的数据库可以用元组表示:
# {Membership.member_id, Membership.start_date, Membership.end_date}
[
让我们假设我有:
%{苹果:%{颜色:红色,id:1},梨:%{颜色:绿色,id:2}
获取关键apple的最快方法是什么,例如按值ex循环,颜色:redEnum.filterenumerable,fun可用于在此处过滤地图。正如所说,它过滤可枚举项,即只返回那些fun返回真实值的元素。在地图上使用filter/2后,我们得到的是一个关键字列表,如下所示:[a:1,b:2],我们使用keyword.keys/1从中提取关键字
本例还显示了match?/2宏,该宏允许我们对各种谓词函数使用模式匹配
我正在应用程序中使用此记录器后端:
在应用程序的mix.exs文件中,在应用程序函数中,:logger\u logstash\u backend包含在:applications键中(在它所依赖的:timex之后)
当我通过iex-S mix启动我的应用程序时,我看到很多错误,如以下所示:
15:49:48.306 registered_name=Logger function=report_error/5 module=gen_event line=747 file=gen_event.e
在澄清尾部呼叫优化概念方面几乎不需要帮助。据我所知,Tail call optimization仅在调用递归函数作为最后一条语句时有效。下面是我的两个例子,我不确定这两个例子是否都优化了尾部调用
使用中间结果变量
def map(list, fun) do
do_map(list,fun,[])
end
defp do_map([],_fun,result) do
result
end
defp do_map([h|t],f
我大约在2-3天前开始做一些长生不老药,然后我开始练习实施BST
到目前为止,所有的学习都很顺利,但我不明白为什么我的add方法在输入时出错BST.add([5,7,6,3,4],12)|>BST.pre_order()
这里是一个代码的剪报
def new([]),do:[]
def新([头|尾])do
插入(零,头部)
|>插入递归(尾部)
结束
def add(预订单树,元素)何时是预订单树
[预排序树元素]
|>新的
结束
defp insert_recursive(根,[]),do:r
在a的包中,我需要一个函数来生成唯一的文档ID
此函数使用v18中不推荐使用的:erlang.now()
我寻求有关如何迁移的帮助,但没有成功
我的实际代码(简称):
我想到的最好的办法是:
defmodule MyModule_v18 do
use Bitwise, only_operators: true
Kernel.if Keyword.get(:erlang.module_info, :exports) |> Enum.any?(fn({:system_time, 1})
标签: Elixir
phoenix-frameworkectoelixir-mix
当我尝试运行mix deps.get或mix deps.compile时,我遇到以下错误:
== Compilation error on file lib/phoenix_ecto/html.ex ==
** (CompileError) lib/phoenix_ecto/html.ex:3: unknown key :model for struct Ecto.Changeset
(stdlib) lists.erl:1354: :lists.mapfoldl/3
为什么会发生这种
我想在部署新版本的应用程序时向所有用户显示“新版本可用,请刷新页面”消息
我在想,如果有一种方法可以在部署新版本后运行一些代码,那么我可以使用它发布到频道
这可能吗?您的应用程序如何start/2功能?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样一条消息。您的应用程序start/2功能如何?它应该在lib/my_app.ex中。您的部署工具呢?可能您可以执行一个“部署后”配方,它会广播这样的消息。
首先,我对长生不老药很陌生,所以这可能是一个误导性的问题
我有一个启动两个进程的函数
第一个进程使用erlang:fs库监视目录中的文件更改,然后向第二个进程发送消息
第二个进程等待目录中的文件已更改的消息,当它收到该消息时,运行一个函数重新生成HTML报告(这是一个发票)
看起来是这样的:
def run_report_daemon(line_item_dir) do
if Process.whereis(:html_daemon) == nil do
spawn(HT
标签: Elixir
phoenix-frameworkecto
我有一个在聊天室中加载所有邮件的查询:
room=conn.assignments[:room]|>Repo.preload(消息:from(消息中的m,订单人:插入的m))
我还希望有一个users变量,它是创建这些消息的不同/唯一记录的列表
我可以从room.messages创建用户ID的地图集,然后查询这些用户。但我想知道是否有一种更干净、更高效的方法来实现这一点 仅供参考,您不需要地图集。您可以像这样使用Enum.uniq:^Enum.uniq中的id(对于m@Dogbert,谢谢。很高
在exto.build\u assoc/3中,是否可以将模型列表作为第三个参数传递?假设我有一个与类别模型有多对多关系的产品模型,以及我想与该产品关联的3个现有类别,是否可以这样做:
product = Repo.get!(Product, 1)
#assume the below function exists and returns a list of categories
categories = Category.get_children(:fashion)
#here, the do
标签: Elixir
phoenix-frameworkecto
我想找出“utc now”和类型为exto.DateTime的变量之间的时间差(以分钟为单位)。最简单的方法是什么?我是否应该在unix时间内转换它们并进行减法,而不是先进行模式匹配并比较年、月、日和小时,然后再实际减去分钟?我不希望使用任何第三方依赖项 JIC:它有一个助手(以及来自_unix!和其他一些工具的),它还负责用生成“utc now”
ElixirDateTime反过来又有,因此人们可能:
dt1, dt2 = [ecto_time, Ecto.DateTime.utc]
以下文件。出错
Phoenix.Template.UndefinedError)无法为MyApp.EmailView呈现“welcome.html”,请为render/2定义匹配子句或在“lib/MyApp/web/templates”中定义模板。没有为此模块编译模板
我在/templates/email中找到了welcome.html。但是,如果我在/templates中有welcome.html,我就不会面对这个问题
。。。以及带有错误的函数
#lib/Myapp/web/email.ex
当我调用mix phoenix.server时,我得到以下错误。我试着重新启动我的电脑
版本:
macOS Sierra 10.12.4(16E195)
长生不老药1.4.2
依赖项:
错误消息:
**(退出#PID)引发异常:
**(File.Error)无法写入文件“/Users/joseph/sites/super/_build/dev/consolidated/Elixir.exto.Queryable.beam”:权限被拒绝
(elixir)lib/file.ex:719:file.w
标签: Elixir
phoenix-frameworkecto
我目前正在进行一系列迁移,这些迁移创建了一些带有引用和一些唯一索引的表。当我想用mix-exto.migrate迁移表时,这似乎工作得很好,但是如果我想回滚mix-exto.rollback会出现以下错误。我是否需要更改迁移以添加一些内容来处理回滚期间的索引
迁移步骤:
defmodule App.Repo.Migrations.CreateTokens do
use Ecto.Migration
def change do
create table(:tokens) do
我在我的计算机上安装了elixir 1.7.2,使用的是asdf,elixir和erlang otp 21。在我的项目混合文件中,我添加了透析器的最新版本候选者,如上所示
当我运行mix dialyzer时,在创建plt时,我遇到了几个错误,其中包括:
Could not get Core Erlang code for: /home/sigu/.asdf/installs/elixir/1.7.2/lib/elixir/ebin/elixir_parser.beam
Recompile wi
我持续监控一个值以进行检测。我想知道如果它是一个递归函数,它会可靠地工作吗?或者我应该创建一个Genserver并连续调用它,以便它能够处理故障?哪些是使用GenServer的最佳案例,哪些不是 GenServer也只是一个递归调用的函数,但它在自己的进程中运行,并且在其顶部有一些附加功能
出于以下几个原因,您需要将长期运行的进程建模为GenServer:
并行性-如果作为一个GenServer(也称为一个单独的进程)实现,系统将能够并行地做其他事情
隔离错误-如果GPIO代码崩溃,您不想影响
我有一张这样的地图:
%{
"US" => "United States",
"CA" => "Canada",
"NL" => "The Netherlands"
}
%{
"United States" => "US",
"Canada" => "CA",
"The Netherlands" => "NL"
}
我希望将键与值交换,从而生成如下映射:
%{
"US" => "United States",
"CA"
上一页 1 2 ...
33 34 35 36 37 38 39 ...
下一页 最后一页 共 125 页