我目前正在学习elixir,我想知道这三个实现是否真的是一个选择问题,或者是否有一些与性能或其他方面相关的最佳实践,换句话说,是否有一个最佳实践
我的第一个实现是第三个(…我知道),但是如果我必须选择,我会选择第二个。第一个对我来说似乎很奇怪,因为我定义了3次函数
谢谢
我想知道这三个实现是否真的是一个选择问题,或者是否有一些与性能或其他方面相关的最佳实践,换句话说,是否有一个最佳实践
它们之间的一个重要区别是,第一个和第三个实现是,而第二个实现不是。这意味着第二个实现将使用O(n)内存在n元素
我在Phoenix应用程序中有以下视图:
defmodule TattooBackend.Web.API.V1.AccountView do
use TattooBackend.Web, :view
alias TattooBackend.Repo
def render("my_account.json", %{account: account}) do
account = account |> Repo.preload(:studio)
studio =
为了独立开发和部署,我们希望在Erlang生态系统中使用Elixir苦艾酒将模式分解为单独的微服务,但他们似乎还没有准备好这个功能。所以我的问题是
是否可以使用Elixir苦艾酒从多个底层GraphQL API创建单个GraphQL模式
我有一个定制混音任务。但是,它工作得很好,在调用它时不会像其他混合任务那样触发编译。我可以手动运行编译,但这非常令人沮丧,因为我几乎总是忘记这样做,并且在我意识到为什么我看不到我的更改之前,必须运行任务一两次
这是“我的”任务,我遗漏了什么
defmodule Mix.Tasks.Return do
@moduledoc """
Task for processing returns
"""
use Mix.Task
require Logger
alias Return
我正试着用长生不老药做我的第一个“你好世界”。第一步就是在我的Macbook上安装它。我正在做:
brew更新
brew安装长生不老药
之后我可以做:
erl--版本
Erlang/OTP 19[erts-8.3][source-d5c06c6][64位][smp:4:4][async threads:10][kernel poll:false]
Eshell V8.3(使用^G中止)
1>
但是当我试图得到长生不老药版本
长生不老药--version
{“init终止于do_boot”{
我有一个字符串列表,我想用两种方式排序
按字母顺序
按字符串长度
要按字母顺序对字符串列表排序,只需使用,它将按默认顺序对项目排序(即字符串的字母顺序)
要按不同的属性(如字符串长度)对列表进行排序,可以使用,它将mapper函数作为第二个参数。然后,这些值将根据应用于每个元素的该函数的结果进行排序
iex> Enum.sort_by(["b", "aaa", "cc"], &String.length/1)
["b", "cc", "aaa"]
你说没有循环是什么意思?排序操作
我正在尝试使用HTTPoison提交此表单
使用以下代码:
HTTPoison.post!(url,{:multipart, [{"username", "user"}, {"password", "pass"}]})
但是,生成的页面提供“无效身份验证”。但是,当我尝试使用相同的凭据使用浏览器登录时,它会起作用
所以我想知道是否可以通过HTTPoison查看原始http请求,以便将其与来自浏览器的原始请求进行比较。如果您只想查看请求,那么访问http://httpbin.org?它回显请求
标签: Elixir
phoenix-frameworkecto
我有这个模板
<div class="form-group">
<label>Insurance Expiry : </label>
<%= date_select f, :insurance_expiry, class: "form-control" %>
</div>
在db模型中
schema "buses" do
# snipped
field :insurance_expiry, :date
end
请看下面我的答案,了解我发现的差异,并告诉我这些差异是错误的还是更多的差异。谢谢。我在长生不老药上看到的不同
handle\u call必须返回应答,handle\u event不必返回应答
在我看来,事件用于更改状态,调用用于获取状态。处理事件可以通过使用同步通知进行同步。不同之处在于,handle\u call将调用事件管理器中的一个特定事件处理程序,handle\u event将在所有事件中为每个事件调用。因此,假设我notify一个事件{:custom\u event,1},模块中定
我有一个嵌套模型,想做一些基本的管道。我的最终目标是为以下参数删除id==“”中的任何嵌套映射:
params=%%{“name”=>“outerrmodelname”,“InnerModel”=>%%{“0”=>%%{“id”=>“2”},“1”=>%%{“id”=>“3”},“2”=>%%{“id”=>“}}}
要删除id==“”以下管道工程:
blanksRemoved =
params
|> Map.update! "InnerModel", f
我原以为这是一个非常基本的问题,但在网上搜索后,我找不到解决办法
我想把一个变量存储在某个地方,然后在函数中引用它
我想解决的问题如下:
我执行HTTP请求以获取API的accesstoken。此令牌仅在一段时间内有效,我只想在旧令牌过期时获取新令牌。
我需要此令牌来执行其他请求。
所以我必须将令牌和它的有效时间存储在某个地方,以便在其他函数中访问它,在这里我可以访问其他请求。我最近也经历过类似的事情,它看起来应该很简单的原因是因为我试图使Elixir像一种面向对象的语言一样工作。要做到这一点,
我有一个文件,其中我需要用其他一组值更改一些特定的值。什么是长生不老药
e、 g
现在,如果我想用elixir更改第5行的some language的值,我怎么用elixir呢
我还想用love更改like的值
如何在elixir中做到这一点?您可以使用逐行读取文件并将这些行处理为可枚举。您可以使用逐行读取文件并将这些行处理为可枚举。尝试使用laravel elixir替换插件:尝试使用laravel elixir替换插件:但这将改变所有位置的值。我们只需要在第5行中更改它。您需要添加globa
标签: Elixir
phoenix-frameworkecto
根据菲尼克斯的文件:
插入(exto.Schema.t | exto.Changeset.t,Keyword.t):{:好,
exto.Schema.t}{:错误,exto.Changeset.t}
插入模型或变更集
在给定模型的情况下,该模型将转换为具有
作为变更集一部分的所有模型非虚拟字段。这一转变
通过直接调用exto.Changeset.change/2完成
在给定变更集的情况下,将合并变更集中的变更
使用模型字段,并将所有字段发送到数据库
如果在中注册了\u insert之前或之后的任
假设我有一个列表[1,2,3,4]
如何从该列表中获取除最后一个之外的所有元素?因此,我将使用[1,2,3]我的解决方案(我认为这不是一个干净的解决方案,但它很有效!)
像这样使用Enum.drop/2:
list = [1, 2, 3, 4]
Enum.drop list, -1 # [1, 2, 3]
除了前面提到的list |>Enum.reverse |>tl |>Enum.reverse之外的另一个选项是Erlang函数,根据文档,该函数速度较慢,但创建的垃圾较少,因为它不
这不是内存不足错误,不知道为什么它会崩溃。erl_crash.dump显示:
Slogan: Kernel pid terminated (application_controller) ({application_start_failure,myapp,{{shutdown,{failed_to_start_child,'Elixir.Myapp.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.Endp
System ver
在加载和评估文件(主要用于配置加载)时,我遇到了几种可能引发异常的错误:
文件不存在。加载错误{file:…,消息:…}
如果配置文件中存在某种语法错误,可以得到:
%SyntaxError{description:…,file:…,line:…}或
tokenmissingeror{description:…,file:…,line:…}
不幸的是,这些异常(xxxErrors)不是使用相同的参数生成的:errordescription有时包含keydescription,有时包含ke
这个简单的代码不起作用
defmodule ElixirCluster do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(Task, [fn ->
IO.puts("Hello")
Process.sleep(1000) #:timer.sleep(1000)
我正在尝试使用此十六进制软件包:
以下是我的模式:
use Amnesia
require Logger
require IEx
defdatabase Database do
deftable User, [{ :id, autoincrement }, :device_identifier, :match_history], type: :ordered_set, indices: [:device_identifier] do
@type t :: %User{ id: non
标签: Elixir
phoenix-frameworkecto
我有一个用户模型,其匹配字段为:map类型。我试图在控制台中更新它,但它不起作用:
iex(16)> changeset = User.changeset(u, %{ matches: %{ "123": true } })
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: #VideoChat.User<>,
valid?: true>
iex(18)> VideoChat.Repo.
我想向从操作返回的结构添加字段或键:
def show(conn, _) do
my_struct = Repo.get(MyStruc, 123)
render(conn, my_item: Map.put(my_struct, :aaa, "fdsfdsfds"))
end
我只需要“show”中的字段。
错误:
key :aaa not found in: MyStruc {__meta__: ..........
我可以将其作为单独的值返回,但我希望将其嵌入MyStruc
我试图在终端中运行mix phx.new,以启动新的phoenix 1.3项目,但收到错误消息:
** (Mix) Phoenix v1.3.0-rc.1 requires at least Elixir v1.4.
You have 1.3.2. Please update accordingly
在获得新版本之前,我运行了brew install elixir,再次尝试并获得:
Warning: elixir-1.4.2 already installed
然而,我运行了elixir-v
标签: Elixir
phoenix-frameworkecto
我在select语句中引用了这个问题()来创建子查询,但是我得到了这个错误
应为映射,获取:{%ZB.JournalEntry{meta:#exto.Schema.Metadata
这是我的代码,我遗漏了什么吗?如果我不使用select语句,代码工作正常
journal_entries = from entry in JournalEntry,
select: {
entry,
(fragment("(SELECT sum(amount) FROM journal_entry
是否有一个与npm安装--save(保存)等效的方法,用于将十六进制模块快速添加到mix.exs
我知道粘贴十六进制模块引用的功能如下:
defp deps do
[
{:asn, "~> 0.2.1"},
{:mix_docker, "~> 0.3.0"}
]
end
应该没什么大不了的,但我已经习惯了传统
npm install --save xyz
模块下载并安装在packages.json配置文件中。非常方便 不,没有
我试图调用String.replace,在这个Elixir代码中,它从structs列表中获取其值,但它只会导致运行时错误
string.replace函数的字符串参数都已打印出来,看起来一切正常。为什么会这样
这是造成错误的原因:
这是完整的代码:
defmodule ParamStruct do
defstruct键:“”,值:“”,默认值:“”,说明:“参数说明”,标签:“web表单上的标签”,必填项:false,顺序:99
终止
defmodule TemplateStruct d
这似乎是世界上最简单的事情,但我正在尝试从一个EXTO查询返回一个整数:
iex(10)> num = Polo.Repo.all(from n in Polo.Account.Number, select: max(n.account))
[debug] QUERY OK source="account_numbers" db=3.0ms queue=0.1ms
SELECT max(a0."account") FROM "account_numbers" AS a0 []
[70241
标签: Elixir
phoenix-frameworkphoenix-channels
我有一个phoenix频道,它在中的句柄之后在句柄信息上推送结果,而不是立即回复(请不要问为什么,我有一个用例)。下面的例子与我的情况类似
def handle_in("topic", %{"param" => param}, socket) do
... do something here ...
send self(), %{:on_topic, result}
{:noreply, socket}
end
def handle_info({:on_topic
在Elixir中,我希望在数据结构创建时强制验证它。为了实现这一点,我假设强制调用一个回调函数,该函数刚创建数据结构,如果该数据结构有效,则返回该数据结构,或者返回一个错误元组
实施的方法是什么
如果我声明一些行为,比如ValidatedStruct,并在结构的模块中实现回调,那么在调用代码中返回新结构之前,我如何在结构初始化时强制调用它?您可以通过一个函数创建结构,您可以将该函数命名为new,并从中调用验证方法在那里
例:(未经测试)
您可以通过一个函数创建结构,您可以将该函数命名为new,并
然而,iex中相同的比较产生了相反的结果
defmodule CompareMaps do
def match do
map = %{a: 2, b: 3, c: 4}
test = %{a: 3}
match? test, map
end
end
CompareMaps.match
true
match?/2是一个宏,它的第一个参数是一个模式,而不是一个值。在第一个代码段中,您正在测试模式test是否与map的值匹配,因为test是一个标识符,并且将与任何值
定义并非所有用户都可以访问的字段的正确方法是什么
例如,普通用户可以查询用户并找到其他用户的句柄,但只有管理员用户可以找到他们的电子邮件地址。用户类型将其定义为字段,但可能无法访问。对于普通用户可以看到的内容,是否应该有一个单独的类型?你如何定义它
抱歉,如果这还不清楚,我只是没有足够的词汇。编辑:注意:不同意这种方法。小心使用。无论你在哪里需要一个私人领域,你必须包括适当的中间件
使用
下面是一些代码如何做到这一点。在本例中,经过身份验证的用户可以看到电子邮件地址。匿名用户不能。您可以调整逻辑
我是Elixir新手,尝试运行Elixir文档中的一些脚本,测试日期结构得到了一个奇怪的结果,因为
Date.compare(~D[2016-04-16],~D[2016-04-28])正在返回:lt
当尝试运行Date.diff(~D[2016-04-16],~D[2016-04-28])时,出现此错误
(UndefinedFunctionError) function Date.diff/2 is undefined or private
(elixir) Date.diff(~D[2016
我有一段代码,我使用一对列表得到一个映射,其中一个列表是键,另一个列表是值。非常直接的代码:
defp create_data_map(columns, row) do
Enum.zip(columns, row)
|> Enum.into(%{}, fn {k, v} ->
{String.to_atom(k), v}
end)
end
我从csv文件中获取这些列表,其中列是第一行,这是标题列表,第二行是其后的任何一行。下面是标题的外观:
["action",
我需要生成这样的序列:
[1,3,5,7,9,13,17,21,25,31,37,43,49,57,65,73,81]
(本例中为17个数字)
算法是:
[1,(先前+2),(先前+2),(先前+2),(先前+2),(先前+4),(先前+4),(先前+4)
所以第一个4个项目为+2,接下来的4个项目为+4,接下来的4个项目为+6。每四个项目增加2个增量
我可以用Ruby做一个快速的黑客版本:
def sequence
incr = 0
(0..16).each.inject([]) d
标签: Elixir
ectoguardianguardian-db
我正在尝试将guardian 0.14和guardian_db 0.8与长生不老药/凤凰一起使用。但是,我在钩子中不断遇到以下错误:
[error] #PID<0.983.0> running Api.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /api/login
** (exit) an exception was raised:
** (UndefinedFun
我目前正在使用Nadia、fsm和Exactor构建聊天机器人。我试图将每个用户的对话建模为一个有限状态机,以引用每个用户当前处于的每个状态,并使用缓存在用户聊天id和他们使用的fsm的相应pid之间进行引用
我的设计基于
下面的代码段创建了pid,但每当我尝试转换到下一个状态(轮询)时,它就会被卡住
我根据在
但是get_user_info函数并没有导致速度减慢
这是一个使用iEx的示例
iex(1)> alias TelegramBot.FsmServer
TelegramBo
这是否是GenServer的有效用途:
如果进程id是用户id并且是唯一的。该过程包含通过数据库生成的大数据图的查询结果。现在,如果100%的用户登录到系统并要求提供他们的数据地图,那么他们都会保存在自己的流程中,该流程由唯一的用户id引用
因此,在请求映射时,我将检查是否有一个具有用户_id(即进程id)的进程,并获取它并将其反馈给用户,如果没有,则创建它并将其置于新状态
现在,如果用户更新了他的地图,在更新时,我会确保更新状态或创建一个新的状态
感谢您的指导如果您的genserver只存储地
我有一个这样的对象数组
[%{id:1,url:'image.jpg'},%{id:2,url:'image2.jpg'}]
我的凤凰模板看起来是这样的
您只需将/预先添加到url即可使其与静态路径一起工作。我假设列表中有一个双引号字符串,就好像你有一个单引号一样,你会得到一个不同的错误。要在/之前添加,请更改:
static_path(@conn, item.url)
到
静态路径(@conn,“/”item.url)
您的对象数组不是有效的长生不老药术语。请更正。代码在我看来很好。你得到
我使用brew install elixir在Mac上安装elixir。它适用于目前发布的版本v1.5.2。如何在Mac上安装像Elixir>=1.6.0-dev这样的开发版本
使用docker-您可以将mix项目装载到docker容器中以运行mix/iex。以下是Dockerfile示例:
使用版本管理器,例如
kiex安装主机
从vscode使用elixir ls工具时,使用kiex的好处是可以跳转到std库函数的源代码,请参见,因为您已经在使用自制软件,安装最新开发版本的最简单方法是使用
在下面的示例中,我创建了一个列表,然后在该列表中添加了一个新值。如果长生不老药都是关于不变性的,这怎么可能呢
l = [1,2,3,4]
iex> [1,2,3,4]
l = l ++ [5]
iex> [1,2,3,4,5]
如果我没有弄错的话,这是将列表重新分配给同一个列表,这应该是不可能的,当我再次调用l时,它应该打印出1到4,而不是1到5。我不明白什么?当您为变量指定一个新值时,实际上是创建了一个同名的新变量
首先,当您执行l++[5]时,不会向l追加任何内容,因为
标签: Elixir
phoenix-frameworkumbrella
我在Phoenix伞形应用程序中重新加载代码时遇到问题
我的雨伞由两个应用程序组成:app和app_web。app_web中的任何更改都会按需要重新加载,但我无法在app中的代码中实现同样的功能
我应该从哪里开始查找呢?我猜您正在运行mix phx.server来自apps/app\u web。这是伞形项目的常见陷阱,您需要从伞形项目的根目录启动服务器,以便重新加载代码才能正常工作。感谢您的帮助!由于此问题,我实际上无法从根目录运行phx.server。我将使用phoenix head版本,直到
我有这样一个布局:
# main_layout.html.eex
<html>
<head>
<............>
</head>
<div class="main_content">
<%= render(@view_module, @view_template, assigns) %>
</div>
<footer ......
标签: Elixir
phoenix-frameworkecto
我需要创建一个表单,用户可以同时编辑多个纸张记录。现在我正在使用一个嵌入式模式,以便Exto可以为我进行转换:
defmodule EmbSchema do
embedded_schema do
has_many :papers, Paper
end
def changeset(emb_schema, attrs) do
emb_schema
|> cast(attrs, [])
|> cast_assoc(:papers, with:
标签: Elixir
phoenix-frameworkecto
有没有一种方法可以在EXTO中定义虚拟模型。没有迁移文件的和不会在数据库中持久化。我在EXTO文档中没有找到任何与此相关的文档。我需要这个来测试iex中的一些功能。使用与应用程序其余部分分离的模型进行测试
我找到了嵌入的模式,其中包含的字段不存在于数据库中,但与模型无关
任何帮助都将不胜感激。嵌入式模式很好
defmodule Test.Model do
@moduledoc~S”“”
未存储在数据库中的虚拟测试模型。
"""
使用exto.Schema
导入外部变更集
@类型t::exto.S
标签: Elixir
documentation-generation
我正在尝试为我的项目生成文档
我已经将{:ex\u doc,“~>0.16”,only::dev,runtime:false}添加到我的deps,将source\u url设置到我的存储库并运行mix docs
我正在使用Github Enterprise,所以我的设置如下:source\u url:https://my.private.repo/adam/projname“
但是,在生成的文档中,指向源代码的所有链接都直接指向https://my.private.repo/adam/projn
考虑以下模式:
defmodule EctoBug.Post do
use Ecto.Schema
import Ecto.Changeset
schema "posts" do
field :title, :string, default: "test"
timestamps()
end
def changeset(post, attrs) do
post
|> cast(attrs, [:title])
|> va
我正在尝试实现Protobuf的一些特性,我有一个例子:一个模块需要在编译时调用另一个模块。它们在同一个文件中,很难确保它们的顺序
defmodule FakeProtobuf do
defmacro __using__(opts) do
quote do
# register_attribute fields and set fields
@before_compile FakeProtobuf
end
end
defmacro __bef
我目前有一个日期和一个时间,我真的想把它合并成一个日期时间结构
在Ecto 3之前,您可以使用Ecto.DateTime.from_date_和_time执行此操作,但在新文档中,由于Ecto类型已被弃用,因此我找不到等效的函数
该函数当前看起来像:
def add_datetime(date_as_string) do
(_, date = Date.from_iso8601(date)
end_time = #T[23:59:59]
datetime = datetime_add(E
标签: Elixir
phoenix-frameworkrebarjiffy
我正在尝试运行混合服务器:
...
Compiling c_src/decoder.c
sh: 1: exec: cc: not found
===> Hook for compile failed!
** (Mix) Could not compile dependency :jiffy, "/home/user/.mix/rebar3 bare compile --paths "/home/user/app_build/_build/prod/lib/*/ebin"" command
我正在尝试为字符串类型编写协议:
defprotocol MyString do
def from(data)
end
defimpl MyString, for: String do
def from(string) do
String.replace(string, ",", "-")
end
end
这是可以编译的,但是当我尝试调用字符串上的MyString.from时,我得到
iex> MyString.from("foo,")
protocol MySt
我试图将一个实体建模为仅附加,另一个子实体引用第一个实体。因此A的结构类似于(按DESC处插入的排序):
(id,version)构成A的主键(也可以执行(id,inserted_at),但开发人员认为版本号更容易阅读)
现在B属于A,每个B都将与A的一对(id,version)对应
| id | a_id | a_version | column | inserted_at |
|------|-------+-----------+---------+-------------|
|
我想创建一个带有实现的函数,我将嵌入到其他模块中,而不必在那些模块中重新实现它。大概是这样的:
defmodule MyModuleWithFunction do
def my_function(m) do
IO.puts("***my name: #{__MODULE__}. My current value: #{m.var1}")
end
end
# usage 1
defmodule M1 do
def var1 do
"M1 var1"
end
上一页 1 2 ...
21 22 23 24 25 26 27 ...
下一页 最后一页 共 125 页