由defp定义的函数未导出,因此我无法在模块中以外的位置执行它们。否,无法通过ExUnit测试它们
我个人避免测试私有函数,因为通常您会测试实现而不是行为,并且一旦您需要更改代码,这些测试就会失败。相反,我通过公共函数测试预期的行为,将它们分成小的、一致的块。在模块定义中,您可以使用@compile指令仅在测试环境中导出私有函数
defmodule Foo do
@compile if Mix.env == :test, do: :export_all
# This will be e
我需要将字符串转换为浮点值或整数。没有这样的方法,
string_to_integer
您可以将其转换为字符列表,然后使用Erlang转换为\u integer/1或转换为\u float/1
例如
除了Jose建议的Integer.parse/1和Float.parse/1函数之外,还可以检查String.to_Integer/1和String.to_Float/1
提示:有关其他转换,请参见到_atom/1,到_char\u list/1,到_现有的_atom/1。谢谢本页的朋友,这里只需
我有一个记录结构和一个映射结构,如:
defmodule Foo.Bar do
defstruct boo: nil, baz: nil
end
defmodule Foo do
require Record
Record.defrecord :bar, Foo.Bar, [boo: nil, baz: nil]
end
我可以像这样将记录转换为地图:
defp update_map({k, v}, map), do: Map.update!(map, k, fn(_) ->
比如说,我想每4小时发送一堆电子邮件或重新创建一个网站地图或其他任何东西,我会如何在凤凰城或仅仅使用长生不老药 你可以用它。你用它就像
job = {{:weekly, :thu, {2, :am}},
{:io, :fwrite, ["It's 2 Thursday morning~n"]}}
:erlcron.cron(job)
作业是一个两元素元组。第一个元素是表示作业计划的元组,第二个元素是函数或MFA(模块、函数、Arity)。在上面的示例中,我们每周四凌晨2点运行一次:io.
我遵循这个教程
但我有一个问题,我不知道如何解决。我认为这与博士后有关
我做到了:
$ mix ecto.create
$ mix ecto.migrate
C:\Users\999\Documents\elixir_files\blog>mix ecto.create
** (RuntimeError) could not find executable `psql` in path, please guarantee it is available before runnin
正在尝试执行此postgres查询:
select date('2015-10-05') from posts;
我正在以字符串形式传递日期:
Ecto.Adapters.SQL.query!(
Repo, "select date('$1') from posts", ["2015-10-05"])
但获取日期时间格式无效的错误
** (Postgrex.Error) ERROR (invalid_datetime_format):
invalid input syntax
我想执行一个系统命令(git clone),并通过Phoenix中的一个通道将输出流传输给用户
我是否可以让System.cmd流式处理结果,而不是等到它完成
或者,我可以将输出写入一个文件,并在附加内容时从该文件流式传输内容吗?可以使用以下内容覆盖输出:
System.cmd "git", ["clone", "YOUR_GIT"], into: IO.stream(:stdio, :line)
结果:
克隆到“你的歌”。。。远程:计数对象:1665,完成。
远程:压缩对象:0%(1/979
我对Phoenix-Elixir非常陌生,我想在控制器中进行mysql查询
mysql查询:从学生中选择*,其中first_name=abc 假设您正在使用和,您可以使用模块中提供的函数从任何地方进行查询。宏已在web.ex中为您导入
对于更复杂的查询,您可能希望将查询移动到模型中,但不移动对回购的调用。如中所述。如果您提供详细信息,则在询问问题时会帮助我们为您提供更好的答案。iex14>query=from s in Chatty.Student,…14>其中:s.id>0,…14>选择:s
在phoenixframework中,我需要创建一个post请求,将参数发送到另一台服务器
由于我是长生不老药的新手,我想知道我该怎么做?有专门的图书馆吗?或者,是否可以在不安装新库的情况下启动post请求?如何使用?您可以使用诸如的库从任何elixir代码发出http请求
请注意,XMLHttpRequest是一个用于发出http请求的浏览器api(很长一段时间以来它根本不是XML专用的)——一般来说,这些请求没有什么“特殊”之处。许多js库(包括Jquery、prototype等)都添加了一
标签: Elixir
phoenix-frameworkecto
我对菲尼克斯/长生不老药真的很陌生,我正试着把我的头脑集中在变化上
我知道它包含一组用于创建或更新模型的更改
我想知道的是,在将更改推送到数据库之前,是否可以修改更改,以及如何修改更改
我的用例如下所示:
我有一个表单,允许人们在数据库中创建新的艺术家
这种形式有一个专业领域
在创建艺术家之前,我想用“,”分割专业字段,将其存储为字符串数组
由于不变性约束,我甚至不确定直接修改变更集是否可行,但我可能会创建另一个变更集插入到repo中
欢迎任何建议,请毫不犹豫地指出我可能正在做的不好的做法或
我有一个使用Exto和Postgrex(Postgrex只在测试中使用)
从EXTO 1升级到EXTO 2后,测试套件开始出现以下错误:
$ mix test
Compiling 4 files (.ex)
Generated ectoo app
** (EXIT from #PID<0.46.0>) shutdown: failed to start child: DBConnection.Ownership.Manager
** (EXIT) exited in: Gen
拥有它:
[%{"id" => "1", "name" => "foo"},
%{"id" => "2","name" => "bar"}]
如何将其转换为以下内容:
[%"foo" => %{"id" => "1","name" => "foo"},
%"bar" => {"id" => "2","name" => "bar"}]
假设您想要一个带有String键的Map,您可以使用for和进入:如下:
iex(1)>
我只想将纯表奇数添加到每个奇数表行。在RubyonRails中,我会使用cycle来实现这一点。在凤凰城实现这一目标的最佳方式是什么,它占用的CPU电量最少
<%= for group <- @groups do %>
<tr class="pure-table-odd">
<td><%= group.name %></td>
</tr>
<% end %>
一个简单的方法是将索引与组一起
在大多数模型测试中,您可以访问@valid_attrs,这允许简单地创建模型,而无需不断复制/键入参数
如果我有用户id约束(不能是随机数,因为id已验证)
是否仍然可以使用@valid\u attrs
现在,我正在我的setup块中创建一个用户,然后在需要时Map.put(@valid\u attrs,:User\u id,User.id)。像这样:
defmodule ModelTest do
# Not really valid without user_id
@valid_att
Elixir提供了一些is功能,可用于检查某个项目是否为特定类型:
is\u atom
是二进制的
是地图
等等
但如何检查值是否是Elixir中的关键字列表?我知道,在下面,关键字列表是一个2元素元组列表,第一个元素是原子,因此我当前的解决方法是:
defmodule KList do
def是_关键字?(list)什么时候是_list(list)do
全部?列表,fn项->
案例项目做什么
{k,{}->is_原子(k)
_->错误
结束
结束
结束
def是_关键字?(_),do:fa
标签: Elixir
phoenix-frameworkecto
我与两个模型用户和地址有一个嵌入式关联,我将它们连接为:
defmodule App.Address do
# ...
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:address, :city])
end
end
当我使用:
inputs_for :addresses, [append: [App.Address{}]], fn address ->
text
我正在尝试将贴图转换为结构,如下所示:
我有一张地图:
iex(6)> user
%{"basic_auth" => "Basic Ym1hOmphYnJhMTc=", "firstname" => "foo",
"lastname" => "boo"}
该值应应用于结构:
iex(7)> a = struct(UserInfo, user)
%SapOdataService.Auth.UserInfo{basic_
标签: Elixir
phoenix-frameworkecto
在我的Phoenix应用程序中,我有一个名为“posts”的模型
以下是相关的控制器操作:
def index(conn, _params) do
posts = Repo.all(Post)
render(conn, "index.html", posts: posts)
end
问题是-这将显示所有以最旧的帖子开始的帖子。我想显示的是所有的帖子都以最新的开始(最老的出现在最后)
如何修改控制器以实现此目的
提前感谢。这是我从文档中提出的一个可行的解决方案。如果有人能
我试图使用npm将jquery添加到Phoenix项目中,但不知何故fsevents无法在Win操作系统下运行。所以我只是下载jquery并将其放在/web/static/vendor文件夹下
我试图通过阅读这篇文章来理解需要做什么,但我就是无法理解
如何从模板页面访问此jquery?一个循序渐进的教程会很好,因为我真的不熟悉node.js或早午餐
谢谢:)我假设您默认使用的是brunch.js,并且您的jquery文件正在连接到app.js(您可以更改文件连接的顺序,请检查您的brunch c
标签: Elixir
phoenix-frameworkhttpoison
我有以下网址
并且需要通过HTTPoison.get获取页面正文。
下面的方法给出了一个超时错误
case HTTPoison.get("https://www.michaelkors.com/four-in-one-logo-belt-box-set/_/R-US_39F6LBLY4B?color=0200", []) do
{:ok, %HTTPoison.Response{body: body}} ->
{:ok, body}
{:error, %HTTP
标签: Elixir
phoenix-frameworkecto
我正试图在我的系统中查询属于某个特定用户的所有联盟
数据设置如下所示:
用户模型:
所以你可以看到,我有很多用户和联盟协会
我正在尝试获取一个用户附加到它的所有联盟的列表
在rails中,它看起来像这样:user.leagues,它将加载所有附加了当前用户id的联盟
我怎样才能用Ecto、Elixir和Phoenix做到这一点?您可以使用Repo.preload将leagues预加载到user中:
user = user |> Repo.preload([:leagues])
# user
标签: Elixir
phoenix-frameworkecto
假设我有一个用于获取所有线程的工具:
Thread |> Thread.ordered |> Repo.all |> Repo.preload([:posts])
如何为:posts提供order_by子句?在文档中,我似乎找不到任何引用exto.Repo.preload/1的内容,因此提供的示例似乎都没有对正确使用此语法有所帮助 通过该模块,还可以很容易地将某些查询应用于预加载之类的事情
我们实现这一点的方法是将查询传递到preload函数中,然后将预加载的结果限制到该查询
假设我有用户和组织模型,以及两者之间的多对多关系。我现在想补充关于两者之间关系的信息。例如时间戳和位置。我该怎么做?我该如何查询这些信息
我认为正确的方向是使用连接模式。以下是类似于以下内容的EXTO文档:
defmodule UserOrganization do
use Ecto.Schema
@primary_key false
schema "users_organizations" do
field :position, :string # adding info
我试图获取在某个日期之前/之后创建的用户,但我收到了此错误
“消息”:“参数\“过滤器\”的值$filter无效。\n在字段\“insertedAfter\”中:应为类型\“NaiveDateTime\”,找到的是\“2018-05-13\”
这个错误是有道理的,因为“2018-05-13”不是NativeDateTime。。。然而,我认为NativeDateTime应该解析字符串“2018-05-13”。我正试图应用我从一本书中学到的东西,但却遇到了困难。我还创建了一个自定义日期标量,但基本上
标签: Elixir
phoenix-frameworkecto
我正在学习编程Phoenix 1.4教程,遇到了一个问题,有人告诉我,给定模块没有实现EXTO Queryable,但我不知道为什么。还有一个类似的问题,但它有一个简单的答案,不适用于我的情况
我的lib/rumbl/accounts/user.ex文件中有此代码:
defmodule Rumbl.Accounts.User do
使用exto.Schema
导入外部变更集
模式“用户”做什么
字段:名称,:字符串
字段:用户名,:字符串
时间戳()
结束
结束
这是我的lib/rumbl/a
我试图使用在远程Elixir节点上部署一个函数,但似乎无法管理它
我在iex中的模块hello中定义了有问题的函数hello world,并尝试使用Node.spawn进行部署:node2@remote,你好,:世界,[]
我希望spawn/4将模块Hello发送到远程节点,以便在尝试生成时在那里识别函数world/0。但是,我得到以下错误:
[错误]节点上的进程PID中出现错误:node2@remote退出值:{:unde,[{Hello,:world,[],[]}}
你使用的术语让你很难理解
例如,平面贴图的类型规格如下所示
平面映射(Enumerable.t(),(element()->Enumerable.t())::Enumerable.t()
在输入和输出数据类型的末尾有许多括号。为什么会有
在TypeScript、Haskell或Rust等其他语言中,数据类型只是没有()的类型
提前感谢。因为某些类型可以参数化,所以您可以指定一个整数列表,例如:list(integer) 以防有人需要它。
在规范中,我们可以选择在具有零arity和类型的函数上键入()或不键入()的两种方式
标签: Elixir
phoenix-frameworkphoenix-live-view
使用Phoenix live view文档,我添加了一个用于编写实时表单应用程序的live页面。有一个非常简单的演示:
<h2>Hello</h2>
Counter is222: <%= @counter %>
<hr>
<button phx-click="dec">-</button>
<button phx-click="inc">+</button>
<table border="
标签: Elixir
phoenixelixir-mixhex-pm
有没有办法以编程方式在自定义混合任务中指定已安装依赖项的当前版本
我有一个包,其中包含一些运行一些生成器命令的自定义混合任务。我想确定hex包的用户正在运行的Phoenix版本,这样我就可以在生成器任务中有条件地执行一些逻辑
我的十六进制软件包依赖于Phoenix,但也支持Phoenix 1.3、1.4和新发布的1.5
我意识到我可以发布一个新版本的hex包,它有一个固定的phoenix 1.5依赖性要求,同时仍然可以将更改移植到我包的旧的主要版本;但我更愿意保留一个主线分支,目前支持尽可能多的
假设我有一个数组
arr=[1,2,14,1,27]
我想制作一个名为arr1的新数组,它将存储arr的所有值,当你取它的模时,这些值将等于1。所以
arr2=[1,14,1,27]
因为1 mod 13、14 mod 13和27 mod 13都等于1。使用filter和modulorem(x,13)==1
输出:
[1, 2, 14, 1, 27]
[1, 14, 1, 27]
这种任务最好通过理解来完成,理解比枚举过滤器/2更强大
因为我能不能请你不要再问数组了,你在过去几天里问过的问
在阅读关于长生不老药不变性以及它如何尽可能避免内存复制的文章时,这似乎是唯一可能的解释,但我还没有在任何地方看到它的明确表述。
例如,在将新元素添加到列表时,描述了该操作只需n个步骤,n是列表的长度,但它只复制原始元素。所以我的假设是:
假设我们有一个列表[1,2,3,4]。它由4个节点组成,但节点本身不包含值。1、2、3、4存储在其他位置,每个节点都包含对相应值的引用,以及对下一个节点的引用。当我们将10添加到列表中时,不仅会创建一个新节点,实际上还会创建五个新节点,因为在原始列表中,编号4的
我有一个函数,它接收带有多个键的地图,其中一些键是可选的。如何编写包含映射的函数签名,同时允许可选键默认为某个值
def handle_my_map(%%{text:text,
打印次数:打印次数,#我希望默认为2
颜色:颜色#我希望默认为“蓝色”
})做
枚举每个(1..print_次,fn()->IO.puts[“(”,color,“):”,text]end)
结束
测试。处理我的地图(%{text:“here”,打印次数:5,颜色:“Red”})
#(红色):这里
#(红色):这里
#(红
Elixir中是否有splat运算符等效项,如*opts?
是否有方法将多个选项(而不是选项列表)作为参数传递给exec函数 没有splat操作符。Elixir(和Erlang)中的函数由它们的名称和arity(String.downcase/1,Enum.member?/2)定义,而变量函数则与此相反
Erlang的一位作者Joe Armstrong在他的书《编程Erlang:并发世界的软件》中提到了这一点:
1) 函数的arity是其名称的一部分,
2) 没有可变函数
如果您想使用参数列表(
@compile模块属性做什么?例如:
@compile {:inline, some_function: 2}
我试着用谷歌搜索一些东西,但没有找到任何信息…来自:
@编撰
定义传递给Erlang编译器的模块编译选项
接受原子、元组或原子和元组列表
有关支持的选项列表,请参阅
@compile的多次使用将累积,而不是覆盖以前的使用
文档现在说该选项也会影响Elixir编译器,并提供了一些示例。答案中的死链接已修复。如何使用@compile将源属性设置为与定义模块的文件不同的名称?我在defm
elixir的无法调用宏定义的函数
例如
defmodule Hoge1 do
for fun_name <- [:foo, :bar] do
defmacro unquote(fun_name)(arg) do
apply(Hoge2, unquote(fun_name), [arg])
end
end
end
defmodule Hoge2 do
for fun_name <- [:foo, :bar] do
defmacro u
这不是一个最有见地的问题,但我真的希望能够按下Control-L并让shell iex清除屏幕。你知道怎么做吗,或者是否有另一个elixir shell与这个内置软件一起使用吗?清除控制台屏幕。你也可以使用命令来清除屏幕。+k你可以键入“clear”的风筝。你还应该指定你正在讨论的是哪个shell/控制台,因为这会有所不同。
我有一个名为Tornado的模块,它实现了一个GenServer,我试图将它作为一个进程生成,并使用与模块本身不同的名称。
根据该方法,可以通过提供一个原子作为参数来注册GenServer进程
children = [
worker(Tornado, [[], [name: :tornado_server]])
]
但是,当我尝试对其调用函数时,我得到一个错误:
iex(2)> :tornado_server.send_requests
** (UndefinedFunctionE
所以我有一个elixir程序,它在循环中运行并执行某些操作。我已经声明了一个代理来创建一个zookeeper连接实例,然后在循环中使用相同的实例。以下是我的代码:-
mix.exs
def application do
[
applications: [:logger, :zookeeper],
mod: {ServiceMonitor, []}
]
end
defp deps do
[
{:zookeeper, github: "vishnevskiy/zookeep
标签: Elixir
phoenix-frameworkectomultiple-selectchangeset
我需要创建一个具有许多角色的用户,因此我遵循以下步骤:
我创建了两个模型,模式是:
schema "roles" do
field :name, :string
belongs_to :user, Module.User
timestamps()
end
schema "users" do
field :name, :string
field :cnpj, :string
has_many :roles, Module.Role
times
我只是在学习长生不老药,我不知道如何在ORDERBY语句中使用变量。我有两个变量排序和方向。这是我正在处理的查询,我想按顺序替换desc和date。我尝试了[^direction:entry.^sort],但它抛出了一个错误。有没有办法按顺序使用变量
journal_entries = from entry in JournalEntry,
preload: [
:journal_entry_lines,
journal_entry_lines: :journal_entry
我有一个这样的结构:
map = %{"a" => "foo",
"b" => [%{"b1" => "bar",
"b2" => "baz"}]}
简单地说,我想得到的是:
map.b[0].b1
最简单的方法是什么?
有没有办法使用kernerl.get_in/2你会得到一个错误,因为你地图的键是字符串,而不是原子,并且没有list[index]语法
你可以把它弄到手
map["b"] |> Enum
例如,我写了一个简单的计算程序,但它不起作用
a = IO.gets"a = "
a = String.to_integer(a)
b = IO.gets"b = "
b = String.to_integer(b)
v = a + b
IO.puts "Sum: #{v}"
如何更正此代码?IO.gets不会修剪尾随的换行符,这会使String.to\u integer即使只输入数字也会失败。您可以使用String.trim\u training/1将其删除:
a = IO.gets("a
假设我有一个长函数的mixin,如下所示:
defmodule Mixin do
@callback cb ...
defmacro __using__(_) do
quote do
def long_function do
#a lot of code
cb(a, b, c)
#even more code
end
end
end
end
defmo
标签: Elixir
phoenix-frameworkecto
我想知道如何自动填充timestamp()生成的“updated_at”和“inserted_at”列
目标是不指定这些值,因为它必须是自动的。
我知道如何处理其他专栏
schema "users" do
field :newsletter, :boolean, default: false
timestamps(type: :utc_datetime)
end
我试过了
schema "users" do
field :newsletter, :boolean, default
我正在寻找一种方法,将用ExUnit编写的测试标记为待定
我知道我可以通过标记跳过测试,但我正在寻找一种跳过测试的方法,这种方法可以使跳过这些测试变得非常透明,因为它们需要实现。其他测试框架,如RSpec或ESpec,会将它们标记为黄色,并在每次运行时突出显示
ExUnit中有这样的功能吗?作为一种解决方案,您可以利用以下功能:
pcregrep -hM "@tag :to_be_implemented\s*test" ./test/**/*.exs | grep test
并可能创建自己的混
我从数据库返回了不同的结构,我想用一些自定义值替换值exto.Assoication.Notloaded,比如它们中的Notloaded
这是一个记录
unit = %{
__meta__: #Ecto.Schema.Metadata<:loaded, "units">,
cdc_location_class_id: nil,
description: "",
facility: #Ecto.Association.NotLoaded<association
我当前有一个params实例,如下所示:
params: %{
"continent" => %{
"deleted_date" => nil,
"name" => "Asia",
"to_be_deleted" => true
},
"id" => "16"
},
我正在尝试对to_be_deleted键进行模式匹配,以便如果它为真,将运行不同版本的update/2,同时还将大陆的内容分配给大陆
我使用的函数获取一些用html编写的表,并将其转换为6元组原子字符串对的列表(例如“…name:dave…”-->({:name,“dave”},{:lesson,“dave”},{……})。我使用Enum.each迭代每一行,并用正确的值替换它。该算法工作,但它没有返回它得到的答案,它只返回一个:ok原子,而不是实际的数据结构。可能是我对函数式语言缺乏理解
我已经读到最后一行是elixir将作为返回值的内容,但它显然没有这样做。当我在枚举器函数中打印行时,它将转换为正确的输出。但是如果我在枚举
我想更新重嵌套映射中的条目。例如,在下面的地图中,我想将城市更新为“诺伊达”。那个么,如何使用库提供的方法来实现这一点呢?我知道有一个方法get_in(map,[:key,…]),这是一个获取值的简单方法。有没有类似的更新方法
input = %{
name: "ashish",
address: %{city: "delhi", country: "IN"}
}
expectation = %{
name: "
我仍然经常使用最新的elixir/phoenix出现此错误,因此这与elixir v1.0.3中修复的错误不同,如下所述:
在另一个终端中运行mix.compile会显示错误,在本例中,它是一个slime模板:
** (TokenMissingError) lib/tealdog_web/templates/workspace/_row_controls_center.html.sleex:30: missing terminator: " (for string starting a
上一页 1 2 ...
28 29 30 31 32 33 34 ...
下一页 最后一页 共 125 页