我正在尝试创建一个程序,它接受用户输入的方式与iex或erl类似(例如,当按下允许键浏览以前的历史记录时)
如果标准IO.get按如下方式使用
IO.gets "user> "
按下up allow(向上允许)时,控制台将结束以下操作
user> ^[[A^[[A
是否有可以在elixir代码中使用的具有readline功能的函数/库
到目前为止我调查的是
有些语言对readline库有绑定支持,但我还没有找到elixir的相应功能
iex实现似乎将此功能委托给了erl(/l
该函数定义为
def http(plug, opts, options \\ []) do
...
为什么有两个参数的含义相同,但名称不同?第一个选项是plug选项。第二种选择是给予牛仔和牧场的选择。我们绝对应该重新命名它们以使其更清晰。顺便说一句,我们非常感谢您的请求。:)请求已提交。
有没有办法匹配整数范围?我希望在一定数量的字符后去掉字符,并添加省略号。这是我想做的,但在1..32上不匹配
def cutoff(title) do
case byte_size(title) do
_ -> title
1..32 -> String.slice(title, 1..32) <> " ..."
end
end
def切断(标题)do
案例字节大小(标题)do
_->标题
1..32->String.slice(
我想像Node.js中的“gulp.js”一样进行自动构建
$iex-S mix-e'dribbblegf.main'
**(Mix)无法将标志隐式传递给默认的Mix任务,请改为调用:Mix run
我想在一行命令中执行此操作
加载应用程序
启动“iex”
do函数(dribbblegf.main)
因为,最后我想看这样的文件
chokidar**/*.exs**/*.ex-c'iex-S mix-e'dribbblegf.main“
如果您有其他自动生成解决方案,请告诉我。试试:
iex
标签: Elixir
phoenix-frameworkelixir-mix
当我使用以下命令时
mix deps.update——全部
如果包的版本未在mix.ex文件中更改,mix将使用本地缓存的包。所以问题是,我如何强制mix不使用缓存版本,而是从服务器下载?例如,如果某个软件包的最后一个版本发生了更改,我想继续更改,即使该版本没有被碰撞。发布的十六进制软件包的第一个版本在最初创建后最多只能更改1小时,之后它将变为不可变且永远不会更改。将来,当Hex在发布前添加用于测试包的工具时,您将永远无法更改已发布的包
Hex执行条件GET请求,以获取已缓存的包。如果包没有更改
标签: Elixir
phoenix-frameworkecto
我试图找出一种方法来检查Phoenix应用程序(使用Elixir)中的params散列是否有特定的键
在模型中的以下变更集函数中,参数默认为:empty
def changeset(model, params \\ :empty) do
我需要弄清楚散列中是否存在一个名为:username的键。只是一个小术语,params是一个映射而不是散列。这与了解文档中的查找位置有关
对于映射,存在返回true或false的属性
Map.has_key?(params, :name)
因为您正在使用一个
我目前正在学习长生不老药,我仍在努力让我的头脑围绕清单理解。我有两个列表,内容和一个素数的一次性列表。我使用两个列表理解,然后使用一个if来确定它是否是素数,将其丢弃并从列表中删除
iex(25)> content = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
iex(26)> for c <- content do
...(26)> fo
我刚刚在我的Phoenix应用程序中安装了mix库,它告诉我web/views/error\u helpers.ex文件在错误标记方法中有重构机会:
def error_标记(表单、字段)do
如果error=form.errors[field]do
内容标签:span,翻译错误(错误),类:“帮助块”
结束
结束
信条传达的信息是:
if条件中不应存在匹配项
换句话说,if error=form.errors[field]do中有一个模式匹配。但是,除此之外,信条库没有详细说明
为什么这样不
在Elixir中,我们可以使用
data = %{field: %{other_field: 1}}
data[:field][:other_field]
如果它包含列表,也可以使用
data = %{field: %{other_field: [1]}}
get_in data, [:field, :other_field, Access.at(0)]
但是,如果data.field.other_字段是一个结构,那么如何获取该数据呢?
上述两种方法都会失败,因为结构不实现Access.fe
这个问题很简单,我在图书馆工作时就注意到了
此表达式返回:
is_atom(nil) # => true
这有点不可预测。我的问题是:这是怎么发生的?它为什么返回true?nil与true和false是一个原子
这在中记录为true和false
您还可以通过以下方式进行检查:
nil == :nil
true == :true
false == :false
一些相关链接:
因为“nil”是一个原子,就像“真”或“假”一样。嗯,这是一个奇怪的解决方案。但我的名字不是Jose Vali
我有一个元组的列表:
golden = [{%{"age" => 80, "name" => "Dorothy"},
%{"age" => 50, "name" => "Rose"}},
{%{"age" => 90, "name" => "Sophia"},
%{"age" => 60, "name" => "Blanche"}}]
方法#1
我使用Enum.map如下,但得到一
我愿意为cassandra db使用客户机,因此我需要将其初始化为:
client = CQEx.Client.new!
我创建了两条路径,读写指向控制器中的操作
问题是,我如何只初始化客户端一次,并在控制器的操作中每次使用它
我应该创建一个GenServer并从控制器操作向其发送消息吗?这样我就可以在GenServer中维护cassandra客户端了
我每次执行操作时都要创建客户端吗
这里有什么建议吗?我还需要进一步挖掘,但它看起来像CQEx.Client.new实际上并没有初始化客户端,这
我正在学习长生不老药(在Ruby,JS中有一些经验)。我有一个有趣的问题。只是出于好奇,为了更好地理解函数式编程
从:
提供一个if/2宏。
此宏要求第一个参数为条件,第二个参数为关键字列表
换句话说,我可以写:
if(true, [do: "true stuff", else: "false stuff"]) # => "true stuff"
这条线工作得很好。嗯
但据我所知,关键字列表是元组列表。所以我试过:
if(true, [{:do, "true stuff"}, {:els
标签: Elixir
phoenix-frameworkecto
如何获取特定的json值并将其存储在具有特定模式的表中
e、 g我试过了
def save_to_payment(conn,result) do
Poison.decode!(result, as: %Payments.payment{} )
end
有了这个模式
schema "payment" do
field :payment_id, :string
field :state, :string
field :amount, :decimal
timestamps()
标签: Elixir
phoenix-frameworkecto
我对我的控制器运行一个简单的测试,然后预加载关联
test "shows chosen resource", %{conn: conn, country: country} do
mobile = Repo.insert! %Mobile{country_id: country.id}
mobile = Repo.preload(mobile, :country)
conn = get conn, mobile_path(conn, :show, mobile)
标签: Elixir
phoenix-frameworkecto
我有两个不同的公司变更集(新建和编辑)。原因是,我想要一个比编辑(可选地址)更简单的注册过程(只需要名称)
下面的测试抛出以下错误:
试图从未加载的公司中转换或更改关联地址。请先预加载关联,然后再通过变更集对其进行操作
我如何/为什么要预加载一个尚不存在的关联
变更集:
def new_changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name])
|> validate_required([:nam
我错误地删除了我写的长生不老药铭文的源代码;作为最后的手段,我试图通过反编译部署在服务器上的可执行文件来获取源代码(如果可能的话)
如果有必要,它是在Ubuntu 16.04上编译的,运行mix escript.build,没有附加参数
如果有人能告诉我如何做或从哪里开始,我将不胜感激
谢谢以下是如何取回文件的已编译Erlang源代码。我不认为这是可能得到原来的长生不老药来源回来,因为它是不存在于所有的描述;只有已编译的Erlang字节码是可用的。如果您知道一些Erlang,反编译的Erlang
我在web/templates/layout/中有默认的app.html.eex,它可以与我的所有模板*.html.eex一起工作。我将app.html.eex文件复制到app.rss.eex,并将内容更改为通用rss代码,以便在我的*.rss.eex模板中仅使用特定代码,但它仅渲染*.rss.eex代码,而不使用布局
我试图插入管道插件:put_layout,{Exampleapp.LayoutView,:app},但没有成功。当然,我将accepts配置为使用带有plug:accepts、[
我正在尝试用phoenix框架构建一个简单的mailer应用程序,在这里我需要发送非阻塞电子邮件。为此,我决定使用这个软件包
问题是,当我将活动对象传递给Verk.enqueue时,会出现以下错误
Poison.EncodeError at POST /1/send
unable to encode value: {nil, "campaigns"}
-
下面的工作,但我必须等待几秒钟,它才能完成
Enum.each(campaign.group.users, fn(user) ->
我有一个长生不老药伞应用程序A,它下面有多个应用程序。其中一个定义为单独的存储库,包含其自己的config/config.exs文件,大部分为默认值
将应用程序B添加到A并启动伞形应用程序时,不会加载应用程序B的配置。看起来我需要在配置中显式地包含B的所有配置参数
我希望应用程序B的配置在应用程序A中仍然可用,我只需要覆盖一些特定的值
有谁能向我解释一下,在主应用程序配置文件中不重新指定所有配置参数的情况下,如何实现此目标?使用mix new生成的伞形应用程序应自动包含所有应用程序的配置
在您的
我正在实现一个API端点。在我的控制器操作中,我想使用保护验证参数类型,如下所示:
def get_object(conn, %{"objectId" => object_id}) when is_binary(object_id) do
当客户端调用此端点时,如果“objectId”不是二进制文件,或者根本没有“objectId”,phoenix将引发phoenix.ActionClauseError。我希望挽救此类异常,并返回一个自定义响应正文(例如,{“message”:“Inva
我正在用苦艾酒配长生不老药凤凰1.3。我有一个博客应用程序,它包含用户、帖子和喜欢的内容,喜欢的内容通过用户和帖子之间的多对多关系连接在一起
schema "users" do
field :email, :string
field :handle, :string
many_to_many :liked_posts, MyApp.Content.Post, join_through: "likes"
end
schema "posts" do
f
标签: Elixir
phoenix-frameworkecto
我用的是外星2.2.6
我正试着让外星人加入
首先,我使用List返回带有单个表的select值。一,
接下来,由于表连接,我使用Map返回select值。二,
Repo.all(from m in "members",
left_join: g in "groups",
on: g.id == m.group_id,
where: g.id == ^group_id
# select: [:id, :group_id, :name, :group_
你将如何获取字符串列表,例如
["jeff", "bezos", "21"]
并将其映射到一个结构
%{:fistname => "jeff", :lastname => "bezos", :age => "21"}
是否可以使用枚举函数,或者是否可以使用映射函数。我需要指定格式的这个结构,这样我就可以将它发送到数据库中我假设每次字符串的顺序都相同
然后您就可以进行模式匹配:
[firstname, lastname, age] = array
%{:fistname =&
如代码所示,插件定义将在宏扩展阶段编译为AST。但是为什么呢?为什么不保留plugs定义并使用Enum.reduce\u while或递归逐个调用plugs?我可以想到两个原因:
表演。考虑这两个代码段做相同的事情,但是使用编译函数调用来完成,而另一个使用枚举。Reals< /Cord>和应用< /C> >:
defmodule A do
def add1(x), do: x + 1
def sub1(x), do: x - 1
def compiled(x) do
x
标签: Elixir
phoenix-frameworkecto
这就是我想要实现的
1. Customer can create a contact with name and phone number.
2. Customer can not create a contact with already existing phone number.
所以我喜欢这个
schema "people" do
field :name, :string
field :phone_number, :string
belongs_to :phon
如果我将我的本地节点作为node.spawn/2的参数传递,它们似乎都会生成Erlang进程。还有什么吗?首先没有Process.spawn/1
有:
, ,
和
.
由于我删除了指向Elixir和erlang文档的全部链接以及指向实现的链接,因此您可以遵循这些链接,并确保它们都是语义糖,以便使用本地或远程erlang调用生成erlang进程
spawn_opt(Module, Function, Args, Options),
spawn_opt(Node, Module, Functio
标签: Elixir
phoenix-frameworkecto
当查询向Elixir返回日期值时,Elixir将其解码为日期结构,该结构允许您使用.year,.month等访问日期的部分。但是,查询是由数据库执行的,您无法使用访问年/月/日。有使用特定于数据库的函数从日期值中提取这些值。假设您使用的是PostgreSQL,则可以使用Date\u part:
defp query_by(query, %{"min_end_date_month" => min_end_date_month} = params) do
query = from(q in
我计划使用exto的Schema和Changeset仅用于验证,而不将任何内容持久化到数据库中,并试图弄清楚是否应该使用。根据文档,它们之间的唯一区别是“嵌入式模式不需要源名称,也不包含元数据字段。”
因此,我选择了嵌入式_schema/1,工作非常出色,但它让我想知道元数据的确切用途是什么?对于澄清这一点没有多大帮助:
存储结构的元数据
这些字段是:
状态-结构生命周期中的状态,其中一个为:build,:loaded,
:删除
source—查询旁边的架构的源
前缀,默认为{nil,“sou
转换此哈希的最佳方式是:
%{
"0" => [
%{"foo" => 1, "baz" => 10}
],
"1" => [
%{"foo" => 2, "baz" => 11}
]
}
像这样的名单
[
%{"foo" => 1, "baz" => 10},
%{"foo" => 2, "baz" => 11}
]
original=%{
"0"
标签: Elixir
gen-servererlang-supervisor
我正在尝试在mix.exs中调用应用程序模块的主管中启动以下工作人员
像这样
defmodule AppStarter do
import Supervisor.Spec
def start(_type,_args) do
children=[
worker(TPMod1,[],[]),
worker(TPMod2,[],[])
]
opts=[strategy: :one_for_one, name: HelloVisor]
Su
标签: Elixir
phoenix-frameworkecto
我正在编写一个迁移文件和一个字段,我想为其设置DB Postgres约束:
def change do
create table(:reviews) do
add(:title, :string)
add(:contents, :string)
add(:stars, :integer)
add(:user_id, references(:users), null: false)
add(:user_id, references(:use
调用函数中有一个字符串变量,我想将被调用函数返回的值附加到调用函数中的字符串变量。
在调试时,我看到每次我对字符串执行concat操作时,它都在创建一个新实例,因此该值没有被更新。
有没有其他方法可以达到同样的效果?所有数据都是不可变的。你可以不做任何更改/更新
不过,您可以重新绑定变量
a=foo
a=a-巴
⇒ 富吧
例如:
a = "world"
b = "hello #{a}"
听起来您正在函数内部执行concat,如下所示:
def concatstr,do:str,世界!
然后像这
当我试图从数据库中获取列表时,出现了这个错误,我不明白为什么
这是引发错误的函数:
def list_lectures do
Lecture
|> Repo.all()
|> Repo.preload(:author [user: :credential])
end
这是我运行代码时遇到的错误:
iex(1)> Ram.CMS.list_lectures
[debug] QUERY OK source="lectures" db=3.4ms d
我正在尝试运行mix deps.get。当我这样做时,我会得到以下错误:
(Mix) Invalid Elixir version requirement <version> in mix.exs file
这似乎很标准。我在网上找不到关于这件事的任何信息。更改版本不起作用,完全排除elixir版本字段也不起作用
注:
系统详细信息:
Erlang/OTP 21 [erts-10.3.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async
我正在尝试搜索已存储在genserver中的键值对。我认为我的语法在如何将映射传递到handle\u调用函数中有问题
这是我的搜索函数和句柄回调函数:
def搜索(存储桶、键值列表)执行
map(键值列表,fn{key,value}->
调用(bucket,{:search,key\u value\u list})
(完)
结束
def handle_调用({:search,key_value_list},from,state)do
{:noreply,Map.get(key\u value\u
下面是这个网页的代码:
我想在列表中添加时间,日期已经存在,如果可能,请帮助我编辑它,这样我就可以知道之前和之后有什么不同,谢谢你的帮助
list.exs中的部分代码
def entries(todo_list, date) do
todo_list.entries
|> Stream.filter(fn {_, entry} -> entry.date == date end)
|> Enum.map(fn {_, entry} -> entry
显示如何在结构上放置两个关联
我遵循了这个模式,效果很好
def create_conversation(%{business: business, contact: contact, message: message} = attrs) do
business
|> Ecto.build_assoc(:conversations)
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_assoc(:contact,
如何使Mix仅运行我的测试套件中的特定测试
运行混合测试时执行所有测试有5种方法仅使用Elixir运行特定测试
使用混合测试路径\u运行单个文件,以\u your\u tests/your\u test\u file.exs
这将运行您的测试文件.exs中定义的所有测试
通过添加冒号和该测试的行号,从特定测试文件运行特定测试
例如,mix test path_to_your_tests/your_test_file.exs:12将在
您的测试文件.exs
定义要在测试方法上排除的标记
defmo
我可以理解:
iex(7)> outside_val = 5
5
iex(8)> print = fn() -> IO.puts(outside_val) end
#Function<20.90072148/0 in :erl_eval.expr/5>
iex(9)> print.()
5
:ok
iex(7)>外部值=5
5.
iex(8)>print=fn()->IO.puts(值外)结束
#作用
iex(9)>打印
5.
:好的
我不太明白的是,
我想删除十六进制上已发布的长生不老药包。我已经知道,我只能用这个命令在创建后一小时内删除它
mix hex.publish --revert VERSION
但是,有没有其他方法可以删除在十六进制上创建后超过一小时的包?谢谢你的建议。引用hex.publishmix任务:
如果要还原超过一小时的发布,需要与管理员联系
您可以将包还原回没有版本的起点
mix hex.publish --revert 0.0.1
这将还原已发布的版本0.0.1,并使包中没有代码,现在只保留名称,直到管理员根据请
标签: Elixir
phoenix-frameworkecto
我在遵循我们在生成的控制器中看到的模式。变更集说它是有效的,但当我更新用户模型时,不会得到更新。这个角色仍然是零
> alias Faq.Repo
> user = Repo.get!(User, 1)
> changeset = User.changeset(user, %{role: 'admin'})
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: #Faq.User<>,
val
我有以下模式:
@primary_key false
schema "companies" do
field :number, :integer, primary_key: true, read_after_writes: true
field :name, :string
field :street, :string
has_many :contacts, Busiket.Contact
我有一张单子
[1, 4, 3]
我想乘以它,比如:
[1, 4, 3] * 3 # => [1, 4, 3, 1, 4, 3, 1, 4, 3]
我该怎么做呢?想到的最简单的事情是:
def multiply_list(list, factor) do
Enum.reduce(1..factor, [], fn(_, acc) -> acc ++ list end)
end
我会使用Stream.cycle/1
iex> stream = Stream.cycle(
我正在尝试在我正在开发的phoenix应用程序的模式中实现一些验证。我的模式中有一个属性:details,其中包含一个地图,其中包含关于问题和答案的数据。例如:
%{
question: "What's for dinner?",
options:[
%{option: "Chicken", selected: false},
%{option: "Fish", selected: true}
]
}
模式还有一个:type属性,用于描述:details映射的内容。
在将Changeset/2插入数据库之前,在调用Changeset/2时,是否有一种内置的方法可以删除exto.Changeset中字段的尾随空格和前导空格
目前,我正在向模式中添加两个自定义函数,用于数据过滤,以提高数据完整性:
defp trim_fields(changeset, fields) do
Enum.reduce(fields, changeset, &trim(&2, &1))
end
defp trim(changeset, field) d
标签: Elixir
phoenix-frameworkecto
我希望我的所有型号都能访问一个new便利函数,该函数返回一个自定义变更集
比如:
def new(attrs) do
changeset(%__MODULE__{}, attrs)
end
这样,当我需要变更集验证时,我可以调用:
Project.Model.new(%%{param1:“param1”})
而不是:
Project.Model.changeset(%Model{},%%{param1:“param1})
我遇到的问题是,当我实现以下宏时:
defmodule Projec
标签: Elixir
phoenix-frameworkplug
我试图测试,当找不到站点id时,下面的插件是否返回404。浏览器中的一切都正常,但测试会引发异常
我的插头:
defmodule MyWeb.Plugs.GetSite do
import Plug.Conn
def init(default), do: default
def call(%Plug.Conn{host: host} = conn, _default) do
case GetSite.get_site_id(host) do
nil ->
我有这张地图:
%{project: %{title: "Frank's Project"}}
我想将地图更新为如下所示:
%{project: %{title: "Frank's Project", subtitle: "another one"}}
我该怎么做
我以前的尝试没有成功:
Map.put_new(params[:project], :subtitle, "another one")
返回此:
%{starterTopic: "garden", title: "Frank's
当我在我的项目上运行mix test时,我得到了以下错误,我不明白为什么:
$ mix test
Compiling 2 files (.ex)
== Compilation error in file lib/myproject_web/controllers/email_controller_test.ex ==
** (RuntimeError) cannot use ExUnit.Case without starting the ExUnit application, please
上一页 1 2 ...
19 20 21 22 23 24 25 ...
下一页 最后一页 共 125 页