如何在Elixir中更好地构造此代码?

我正在学习Elixir作为我的第一个函数式语言。作为第一个熟悉环境和语法的简单项目,我选择构建一个简单的程序,为命令行上提供的数字计算基本因子。这是我的第一个解决方案: defmodule Prime do defp is_factor?(number, divisor) do cond do rem(number, divisor) == 0 -> divisor true -> nil end

在Elixir中,散列和映射有什么区别

为什么Phoenix框架中的“params”是映射而不是散列? 任何人也可以解释内部实现级别的详细信息。来自: 注意:最近使用EEP 43将映射引入了Erlang VM。Erlang 17提供了EEP的部分实现,其中仅支持“小映射”。这意味着地图只有在最多存储几十个键时才具有良好的性能特征。为了填补这一空白,Elixir还提供了HashDict模块,该模块使用散列算法提供了一个性能良好的字典,支持数十万个键 “地图”的主要优点之一是部分模式匹配: def edit(conn, %{"id" =&

如何在Elixir项目中使用封闭源代码的Erlang库?

我想在Elixir项目中使用一个封闭源代码的Erlang库。该库具有以下目录结构: 息税前利润 包含1.app和各种.beam文件 普里夫 包含此库中已在C中实现的部分的共享对象文件 在我的Elixir项目中,使用这个库的推荐方法是什么?实现闭源OTP依赖性的方法可能不止一种,但这里有一种推荐的方法应该有效 下面是git存储库中的一个封闭依赖关系示例(仅存在rebar.config和ebin文件夹):(项目的源代码) 如果您要从ebin和priv托管封闭源文件,并将rebar.con

Elixir 如何在运行时配置EXTO?

根据,我在config/config.exs文件中有以下的EXTO配置: config :my_app, MyApp.Repo, adapter: Ecto.Adapters.Postgres, url: "postgresql://postgres@localhost/myrepo", size: 20 如果我的理解是正确的,config.exs将在编译时进行计算 有没有办法在运行时执行此配置步骤 这适用于将作为编译二进制文件分发的应用程序(通过exrm)。最终用户应该能够通过标

Elixir函数的自定义typespec,以确保用作函数参数的两个列表的维度相似

我正致力于在Elixir中重新实现NumPy/SciPy的一些基本线性代数功能。别担心,我知道这是一个有点轻浮的努力。我只是为了好玩 目前,我已经有了一系列的工作函数,但特别是向量,我想添加一些自定义行为。 最简单的例子就是这样。假设我有一个函数add_vectors/2: def add_vectors(vec_1, vec_2) do for {el_1, el_2} <- Enum.zip(vec_1, vec_2), do: el_1 + el_2 end 但是,这只检查类型

Elixir 启动phoenix应用程序时出错

克隆phoenix应用程序并在本地运行会在OSX上出现以下错误 尝试删除_build、deps、node_模块并重新安装两次,但仍然出现了有关文件监视程序的错误 目前是否无法将这些用于节点6 **elm -v** 0.17.1 **elixir -v** Erlang/OTP 19 [erts-8.0.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace] Elixir

Elixir 如何在phoenix js中中止请求

想象一下:您在后端/网络上遇到了第一个请求和一些问题。。。然后用户单击,您有第二个请求。您不再需要第一次请求的结果。如何中止第一个请求?如xhr.abort

Elixir 如何为共享/footer.html.eex编写查询?

我有一个共享的页脚,几乎可以在所有页面上显示。我想在其中显示数据库中的一些信息。除了在我的webapplication accross所有控制器的每个操作中查询它并在每个控制器的每个操作中通过赋值传递它之外,是否有任何方法可以在某种类型的footer操作中查询它一次 > P>你可能想考虑创建一个控制器插件,它允许你在任何数量的控制器和动作中分配页脚信息。然后,在控制器中会有如下内容 plug :assign_footer when action in [:index, :show, :edit]

如何访问Elixir中通过管道操作符传递的参数?

我在Plug.Conn上进行了一系列转换,需要访问中间结果 n_conn = conn |> Plug.Conn.fetch_query_params() nn_conn = n_conn |> assign(:result, inspect(Timestamp.convert_datetime(n_conn.params))) nn_conn |> send_resp(200, nn_conn.assigns.result) |> halt() 我需

Elixir 在EXTO中加载树状结构

我有一个实体节点,它引用自身以创建树状结构 以下是迁移: create table(:nodes) do add :name, :string, null: false, size: 64 add :parent_id, references(:nodes, on_delete: :nothing) end 这里是模式定义: schema "nodes" do field :name, :string belongs_to :parent, Node has_many :c

Elixir ex_admin(Phoenix)中的自定义模板类型

我有一个在Phoenix中构建的博客,在后端使用ex_admin,我想覆盖我博客文章模板的一些默认输入 我的帖子具有以下属性: schema "posts" do field :title, :string field :image, :string # will store as URL, will reference external host like S3 field :created_on, :datetime field :content, :

Elixir 如何从核心应用程序发送电子邮件而不将其与web界面耦合

假设我有两个独立的应用程序,一个是核心Elixir应用程序,处理所有的业务逻辑和诸如此类的事情,另一个是web界面Phoenix框架,显然是针对这个核心应用程序 因此,这个核心应用程序应该能够发送电子邮件,因为它知道何时何地发送电子邮件,但问题是电子邮件显然包含HTML代码,在phoenix端呈现它们会更容易,特别是考虑到我使用phoenix_swoosh软件包制作swoosh,这比核心应用程序更容易,但我不想这样做从核心应用程序调用web界面的代码,因为它打破了我所看到的界限,我也不想将pho

如何在Elixir/Phoenix中向循环列表中添加项目

我正在学习长生不老药/凤凰,有一项任务摆在我面前。我需要在一个周期内从数据库中筛选结果。大概是这样的: user = Repo.get_by(User, api_token: token) rooms = Repo.all(Room) result = [] if !Enum.empty?(rooms) do Enum.each rooms, fn room -> users = Poison.decode!(room.users) if Enum.member?(us

Elixir 如何使用EXTO按时间增量进行查询?

尝试组合查询,查找30天前创建的所有用户,该用户与以下psql查询相对应: SELECT * FROM users WHERE date_part('day', now()-inserted_at) > 30; from u in User, where: u.inserted_at > ago(30, "days")

Elixir 对Spree API的HTTPoison多部分Post请求

在尝试使用HTTPoison向Spree发布图像时,由于Rails错误NoMethodError undefined方法'permit'失败 我需要做什么才能让HTTPoison很好地使用这个railsapi?内容配置行。curl会自动添加这些值,但是Hackney会按原样传递您指定的数据,因此您需要自己将双引号添加到值中 这: 应该是: [{"name", ~s|"image[attachment]"|}, {"filename", ~s|"42757187_001_b4.jpeg"|}]

Elixir 使用put_assoc和ID数组将多个_更新为多个

我得到了一个简单的模式产品,其中包含多对多:标记关系,没有连接表的中间模式 many_to_many :tags, Tag, join_through: "products_tags" 现在问题很简单,在Ruby的ActiveRecord中,有一个方便的setter,您可以在其中设置关联记录的ID数组,它将自动更新连接记录,即:product.tag_id=[1,2,5,6] 在EXTO中,如果我想使用put_assoc,它似乎需要我预加载数组中的所有标记,这样我就可以执行put_assoc:

在Elixir(非Phoenix)应用程序中呈现部分EEx模板

我有一个命令行Elixir应用程序(这不是Phoenix应用程序),我想在一个名为saymy_template.eex的模板中呈现一个部分.eex模板。我有这样的代码: EEx.eval_file("layouts/my_template.eex", title: title, body: body) 在my_template.eex中,我想呈现部分模板\u footer.eex 我该怎么做 部分模板是在Phoenix中组织模板的方便方法。它们仍然是普通的好模板,因为您没有使用Phoenix,

生成的查询中出现Elixir Phoenix错误

我是一个长生不老药/凤凰城的新手,试图找出基本的东西,这样我就能跟上进度。我很难理解下面的模式定义是什么导致生成的查询不正确 旁注:我正在使用Tds.exto适配器访问一个只读的MSSQLServer2005数据库 defmodule Rodes.Sigcdpro do use Ecto.Schema import Ecto.Changeset alias Rodes.Sigcdpro @primary_key {:cpros, :string, []}

Elixir Phoenix控制器测试用例丢失当前用户

我面临的问题是,在所有测试中,我需要对登录的用户声明多个内容,但它似乎会丢失保存的会话 我有一个设置代码,在每次测试之前分配一个夹具用户: setup %{conn: conn} = config do if username = config[:login_as] do user = insert_user(username: username) conn = assign(conn, :current_user, user) {:ok, conn: conn, u

Elixir 未定义的函数类型转换附件/3

新的长生不老药和凤凰。尽我所能尝试。 defmodule Countdown.Posts.Post do 使用exto.Schema 导入外部变更集 模式“posts”做什么 字段:描述,:字符串 字段:image,Countdown.postploader.Type 字段:shot,:naiver\u datetime 字段:标题,:字符串 时间戳() 结束 @虚假文件 def变更集(post、ATTR)do 邮递 |>演员阵容(attrs,[:title,:shot,:description

Elixir 切换Phoenix.控制器级别ExAdmin

我是Elixir/Phoenix的新手&我在后台使用ex_admin,我想切换Phoenix 控制器日志级别为info。对于我自己的web模块来说,它可以正常工作,但我无法找到一种方法在deps中覆盖它,并强制它使用info而不是debug 可能的重复我不想忽略这些日志行,我想更改它们的日志级别

从Elixir中的列表理解中排除结果

我有一个简单的清单: 对于x nil#直接从输出中排除此值 val->val#像往常一样将该值添加到输出中 结束 结束 除了运行整个理解,然后过滤掉nil值之外,还有更好的方法吗?支持过滤器、生成器、模式匹配和内置多个子句 过滤器nil值: x代表x[1,2,3,4,5,6,7,8,9,0] iex>compute=fn x->如果x>5,则执行:x结束 iex>对于x[6,7,8,9] 支持内置过滤器、生成器、模式匹配和多个子句 过滤器nil值: x代表x[1,2,3,4,5,6,7,8,9

Elixir 长生不老药内置组合法? defmodule Itertools def组合(0),do:[] def组合([],389;),do:[] def组合([h | t],m)do (对于与Erlang类似的l

,Elixir没有内置函数进行组合。正如Rosettacode所说的“此Elixir代码刚刚从Erlang转换而来”: defrc-do模块 定义梳(0,389;),do:[[] def comb(_,[]),do:[] def comb(m[h | t])do (对于l,我不知道有任何内置方法可以做到这一点,但GitHub上的包可以做到 您当然需要将其添加到您的mix.exs依赖项中: defmodule Itertools def combinations(_, 0), do: [[

Elixir 如何更新Exto/Phoenix中的现有数据?

我想根据现有数据更新条目中的字段 我可以在变更集管道中定义方法吗?或者我需要先更新数据,然后应用变更集 例如,我有一个用户具有UUID。如果长度没有达到8,我需要用额外的“0”来更新字段 “123”=>“00000123” 我知道我们总是可以生成新数据的映射,然后传递到变更集: user = Repo.get(User, 1) new_uuid = "00000#{user.uuid}" user |> User.changeset(%{uuid: new_uuid}) |> R

Elixir 如何在PhoenixLiveView更新视图时启动动画

我有一个简单的liveview,它统计表中的行数并显示。它得到了更新,并且运行得很好。但是我想向用户展示一些动画例如,当数字增加时,数字会快速“闪烁”或模糊。 我尝试了onchange=“something”,但这对我不起作用 以下是实时查看代码: defmodule DatabaumWeb.MessageCountLive do use Phoenix.LiveView alias Databaum.API def render(assigns) do ~L"""

Elixir 如何正确设置凤凰城银行的存款功能

我正在尝试创建一个基本的网上银行,在那里客户可以创建帐户并将存款存入他们的帐户。这是我第一次使用Phoenix和Elixir,我在存款功能方面遇到了很多问题。我的想法是,客户需要存入的只是他们的账户ID和金额。因此,我在user_controller中为此创建了一个函数,该函数将ID与金额一起输入,但是,当我尝试在postman中发布时,我在SpBankWeb.UserController.deposit/2中遇到了可怕的无函数子句匹配。。。也许是因为我是如何发布的,或者我的逻辑是如何构建的,或

Elixir 哪种形式的长生不老药更为惯用?

在编写方法时,像这样在Elixir中提供默认参数是否更惯用: def mktempfile(ext\\\“.log”,路径)do 还是最好有两个函数定义一个: def mktempfile(ext,path)do 还有一个 def mktempfile(路径)do 其中,未提供ext的第二个定义将假定ext为默认值。如果是这样,有人能解释一下原因吗?更惯用的说法是: def mktempfile(path, ext \\ ".log")

Elixir 如何获得列表的排列?

如何获得Elixir中列表的排列 例如,对于[“a”、“b”、“c”],我希望: # [["a", "b", "c"], ["a", "c", "b"], # ["b", "a", "c"], ["b", "c", "a"], # ["c", "a", "b"], ["c", "b", "a"]] 像这样: defmodule Permutations do def of([]) do [[]] end def of(list) do for h <- l

Elixir 对Base.decode16的输出感到困惑

如果我使用Base.decode16解码666F6F它等于“foo” Base.decode16!(“666F6F”) #“福” 。。。但如果我解码这个: Base.decode16!(“666F6F01”) # 为什么当我将01添加到要解码的字符串时,输出会变成二进制?为什么输出不是“foo1”?01不是“有效”的ASCII值(它不是文本,而是一个称为“SOH”的符号) 如果你想得到“foo1”,你需要给出“666F6F31” 31(十进制为49)是字符“1”的ASCII值 完整的ASC

Elixir 为什么不能在宏外部调用“unquote”?

h unquote表示“从宏内部取消引用给定表达式。” 但是,我刚刚看到了一种可以在宏外部使用的方法 defmodule Example do x = 4 def foo do unquote(x) end x = 5 def bar do x = 4 "#{unquote(x)}, #{x}" end end IO.puts Example.foo #=> 4 IO.puts Example.bar #=> "5, 4" 这是相

Elixir 为什么从不调用handle_info?

我试图利用handle\u info跟踪加入用户的状态,但我注意到,尽管用户成功加入并发送/接收消息,但从未调用handle\u info defmodule App.UserChannel do use App.Web, :channel alias App.Presence ... ... def handle_info(info, socket) do IO.puts info IO.puts "* * * " {:ok, _} = Presence.track

Elixir (RuntimeError)预期操作/2返回插头。连接,所有插头必须接收连接(Conn)并返回连接

在我的一个控制器中,我有以下代码(摘录): 我做错了什么?堆栈跟踪告诉您控制器操作没有返回Plug.Conn结构。在Elixir中,返回函数最后一个表达式的结果。查看函数的最后一行,确保它返回case表达式的结果 def(conn, params) do final_conn = case HTTPoison.get("https://*****.zendesk.com/api/v2/users/search.json?query=" <> clid, headers,

Elixir 如何检查映射是否也是结构?

在Elixir中,我可以通过调用有意义的函数来检查变量是map还是struct,因为我想区分两者。我知道我可以在一个结构上调用\uuuuuuuuuuuuuuuuuuuuuu来获取它的模块名,但在普通映射上调用它会抛出: **(KeyError)键:%{ 所以我的问题是,如何检查变量是映射还是结构? 示例用例: #我希望在模块中以不同的方式处理结构和映射输入 定义模块的不同内容 def do_something(arg)何时是_map(arg)do #用地图做点什么 结束 def do_som

Elixir 编程Phoenix-无法访问注册表页

在我的编程Phoenix应用程序中,我最近清除了我的cookie,现在由于某种原因,it应用程序不允许我访问“注册”页面(用户/新) 它给了我一个“你必须登录才能访问该页面”的错误 和我的auth.excode: defmodule Rumbl.Auth do import Plug.Conn import Comeonin.Bcrypt, only: [checkpw: 2, dummy_checkpw: 0] import Phoenix.Controller alias R

如何在elixir上生成函数?

我正在尝试执行elixir分布式任务指南,但遇到了以下问题: ** (EXIT from #PID<0.62.0>) an exception was raised: ** (BadFunctionError) expected a function, got: #Function<20.50752066/0 in :erl_eval.expr/5> :erlang.apply/2 然后用:iex--name启动machine2silver@19

Elixir Can';在凤凰城看不到CSS';s ex_管理插件

正在尝试为Phoenix安装。遵循了以下指南上的说明: …每当我转到/admin时,css都是未格式化的;它只是黑白相间的html。我试着直接将早午餐指向模块的资产: ex_admin_demo/brunch-config.js ……但这似乎也不起作用。是否需要在这里进行手动早午餐覆盖,或者是否有其他方法告诉brunch阅读/dep/ex_admin/资产?当您运行mix admin.install时,它将附加您的brunch config.js文件以及一些注释,解释您需要在brunc

Elixir ETS密钥模式匹配

我正在使用ETS缓存一个数据库模式,该模式来自使用ecto的后出口 以下是这些例子: 表=:ets.new(:cache_name,[:set,:protected]) 并包括: :ets.insert(表,{:first_表,{1}) :ets.insert(表,{:first_表,{5}) :ets.insert(表,{:second_表,{1}) 但是第二个替换了第一个,因为这个原因,我对表名和id进行了加密,以获得一个唯一的键:ets.insert(表,{:first_table1,{1

Elixir 行动前:在Phoenix中设置等效物

我想烘干这个控制器: defmodule Xyz.ExampleController do use Xyz, :controller alias XyZ.Shops def a(conn, %{"id" => id}) do product = Shops.get_product!(id) tax = product.price * 0.15 ... render(conn, "a.html", foobar: foobar, prod

Elixir:从父目录运行应用程序

我有一个根目录和几个elixir应用程序。有没有办法:mix run--no-halt从根目录而不是应用程序目录运行一些应用程序 my_root_dir | ├── my_first_app | ├── my_second_app 您需要将MIX\u EXS变量设置为指向MIX.EXS文件。对于您的情况,它可能类似于: MIX_EXS=my_root_dir/my_first_app/mix.exs mix run --no-halt 问题是你为什么要在第一位?我会回应为什么你需要在第一位这

Elixir 函数未定义或私有,但应可访问

我正在尝试从我的帐户域访问一个方法。我可以使用iex中账户域中的任何方法,除了标记为\u admin/1(最后一个) 这是域名 defmodule Storex.Accounts do import Ecto.Query, warn: false alias Storex.Repo alias Storex.Accounts.User def create_user(attrs \\ %{}) do %User{} |> User.changeset(at

Elixir检查guard中的字符串是否为整数

是否可以检查传入的字符串参数是否为整数?例如,我需要根据其id(“12345”)或外部id(“euv9wwzz48bmzsui6ivcle2nhgiepomlwc9iodv”)检索模型。这有可能实现吗?我尝试了is_integer,但它返回false,因为它不尝试解析字符串 def call(%{params: %{"id" => id}} = conn, module) when is_atom(module) and is_integer(id) do ZB.Repo.get!

Elixir 如何在GenServer中获取异步失败的通知?

在elixirGenServer中,有同步和异步方法、handle\u cast和handle\u call。在异步情况下,如果方法失败,我如何获得通知 方法失败意味着在handle\u调用方法中,我需要定义一些逻辑来查询/写入数据库。如果数据库操作失败,我需要通知调用方此失败。在异步方法中,我如何才能做到这一点呢?因此,鼓励您“任其自然”的评论通常是正确的。惯用的Erlang和Elixir要求“快速失败”,并允许主管重新启动崩溃的组件 也就是说,有时撞车是不合适的;通常情况下,当你知道负面结果

Elixir Repo.stream as Flow';无限数据源

我已经玩ElixirFlow有一段时间了,最近我尝试使用Flow和Repo.stream并行化我的工作流程,使用: endless_db_stream = MyRepo.stream(some_query) MyRepo.transaction(fn -> endless_db_stream |> Flow.from_enumerable() |> Flow.each(&process(&1)) |> Flow.run end) 但它就是

Elixir 无法在postgresql 10中打开Citext的扩展名控制文件

我刚刚在Fedora 28中安装了postgresql 10。然后我做了一个混合异位移植,但它说 **(Postgrex.Error)错误58P01(未定义的_文件):无法打开扩展控制文件“/usr/pgsql-10/share/extension/citext.control”: 没有这样的文件或目录 我还安装了postgresql10 contrib pg_config--sharedir 返回 我可以找到 /usr/share/pgsql/extension/citext.control

Elixir 每个用户的唯一约束

考虑以下变更集: defmodule Flashcards.Cards.Deck do use Ecto.Schema import Ecto.Changeset schema "decks" do field :name, :string field :user_id, :id timestamps() end @doc false def changeset(deck, attrs) do deck |> cast

Elixir 如何安装旧版本的Hex?

如果我运行mixlocal.hex,我会得到hex的最新版本。我怎样才能: 列出可用版本 是否安装旧版本 要安装旧版本的hex,请使用mix hex.install。请参阅混合帮助hex.安装: 混合六角头安装 手动安装特定的十六进制版本 mix hex.install VERSION 我不知道如何从命令行中列出可用的十六进制版本,但应该很有用。我想知道为什么mix help没有列出此任务。。。无论如何,谢谢你。

如何删除Elixir/Phoenix中小数点后的尾随零?

我有一个数字列表(浮动):[1.0,3.0,0.25,0.125] 如何在Phoenix模板中设置这些数字的格式,使1.0和3.0分别显示为1和3,而0.25和0.125则按原样显示 请注意,这些数字来自数据库 我在谷歌搜索中找不到任何东西。可以使用和内核。=/2来检查浮点值是否是一个整数 Enum.map([1.0,3.0,0.25,0.125],&if round(&1)==&1,do:round(&1),else:&1) #⇒ [1, 3, 0.25, 0.125] 旁注:当必须使用=而

上一页 1 2 ...  50   51   52   53    54   55   56  ... 下一页 最后一页 共 125 页