标签: elixir-iex

在长生不老药中使浮点数变圆的最佳方法是什么

我正在尝试将 e 中的 a 舍Float入到小数点后两位。

如果我有数字12.555,我希望我的舍入函数返回12.56

我最初认为这Float.round是我想要的,但这个函数并不总是返回我想要的答案。

例如...

iex()> Float.round(12.555, 2)
12.55
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过临时功能完成这项工作,但我认为必须有更好的解决方案。

我目前的解决方案是...

iex()> round(12.555 * 100) / 100
12.56
Run Code Online (Sandbox Code Playgroud)

这可以完成工作,但就像我说的那样,我只是想知道是否有更好的解决方案。

提前致谢

math floating-point elixir elixir-iex

12
推荐指数
1
解决办法
3529
查看次数

来自 elixir 脚本的非常基本的 IEx 和 IEx.pry 出现错误:IEx shell 正在运行?

我正在阅读 Dave Thomas 的《Programming Elixir》,并尝试列表章节中的一些示例。

当我学习一门语言时,我更喜欢通过跑步来尽可能保持基础<language executable> <script file>。在这种情况下我正在跑步elixir reduce.exs

reduce.exs 的内容:

require IEx;

defmodule MyList do
  def reduce([], memo, _), do: memo
  def reduce([head | tail], memo, func) do
    IEx.pry
    reduce(tail, func.(head, memo), func)
  end
end

ExUnit.start()
defmodule MyListTest do
  use ExUnit.Case

  def test do
    assert 10 == MyList.reduce([1,2,3,4], 0, &(&1 + &2))
  end
end

IO.puts(MyListTest.test())
Run Code Online (Sandbox Code Playgroud)

运行时控制台输出:

Cannot pry #PID<0.70.0> at reduce.exs:9. Is an IEx shell running?
Run Code Online (Sandbox Code Playgroud)

我认为我完全误解了一些核心概念,但我不完全确定它们是什么。

iex我的期望是,当程序执行 时,它就会进入会话IEx.pry。鉴于 iex 在 elixir …

elixir elixir-iex

5
推荐指数
1
解决办法
886
查看次数

获取 IEx 中所有 Elixir 模块的列表

要获取 IEx 中模块上所有函数的列表,我可以运行:


Map.__info__(:functions)
# or
Enum.__info__(:functions)


Run Code Online (Sandbox Code Playgroud)

使用{Module}.__info__(:functions)格式。

如何获取所有标准库模块的列表?

elixir elixir-iex

5
推荐指数
2
解决办法
1915
查看次数

是否有可用于“iex”的 vim 模式

有可用的 vim 模式吗iex?也就是说,类似于set -o vibash 中的东西。

这是我的版本信息:IEx 1.13.0 (compiled with Erlang/OTP 24)

我正在运行它Linux Mint 20.2 Uma

elixir elixir-iex

5
推荐指数
1
解决办法
261
查看次数

如何清除灵丹妙药外壳?

这不是最有见地的问题,但我真的希望能够按 Control-L 并让 shell iex 清除屏幕。知道如何做到这一点,或者是否有另一个带有此内置功能的长生不老药外壳?

elixir elixir-iex

4
推荐指数
1
解决办法
755
查看次数

是否可以启动交互式 Elixir shell 并立即调用函数?

在 Elixir 中,您可以iex通过以下命令将 shell 与应用程序的上下文一起使用...

iex -S mix
Run Code Online (Sandbox Code Playgroud)

这个命令非常方便,让我们可以在交互式 shell 中使用应用程序功能。

我想知道是否可以使用参数启动交互式 shell,或者是否可以让您的应用程序在用户与 shell 交互之前调用某些函数。

例如,假设我有一个名为 的应用程序MyApp,并以 启动它iex -S mix。而不必手动在 shell 中输入命令,例如

iex -S mix
Run Code Online (Sandbox Code Playgroud)

有一种方法可以让这一切自动发生。

elixir elixir-iex

4
推荐指数
1
解决办法
5748
查看次数

如何将命令行参数传递给 mix run --no-halt

所以我有一个遵循以下布局的应用程序模块:

defmodule Project.Application do


  use Application

  def start(_type, _args) do
    children = [
      randomchild1,
      randomchild2,
      {Project.runapp, "argument" }
    ]

    opts = [strategy: :one_for_all, name: Project.Supervisor]
    Supervisor.start_link(children, opts)
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它时,我使用它mix run --no-halt并且运行完美。

我想用在命令行中传递的值替换“参数”?我不知道如何向mix run --no-halt.

我想做的就是将一个值传递给 start 方法并使用它来定义子进程。

elixir-mix elixir elixir-iex erlang-supervisor

4
推荐指数
1
解决办法
2064
查看次数

在 iex 的下一行使用管道(之前的语法错误:'|&gt;')

在 Elixir 的管道链中,将管道放在行的开头是标准的:

1
|> IO.inspect(label: "initial value")
|> Kernel.+(1)
|> IO.inspect(label: "plus one")
|> Kernel.*(2)
|> IO.inspect(label: "times two")
|> Integer.to_string(2)
|> IO.inspect(label: "in binary")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在 IEx 中执行此操作时,会发生以下情况:

iex(1)> 1
1
iex(2)> |> IO.inspect(label: "initial value")
** (SyntaxError) iex:2:1: syntax error before: '|>'
Run Code Online (Sandbox Code Playgroud)

可以通过将管道操作符移动到行尾来解决:

iex(1)> 1 |>
...(1)> IO.inspect(label: "initial value") |>
...(1)> Kernel.+(1) |>
...(1)> IO.inspect(label: "plus one") |>
...(1)> Kernel.*(2) |>
...(1)> IO.inspect(label: "times two") |>
...(1)> Integer.to_string(2) |>
...(1)> IO.inspect(label: "in binary")
initial value: 1
plus …
Run Code Online (Sandbox Code Playgroud)

pipe elixir elixir-iex

4
推荐指数
1
解决办法
187
查看次数

Elixir 结构真的是不可变的吗?

我目前正在学习 Elixir,并且正在阅读《使用 Elixir、OTP 和 Phoenix 进行功能性 Web 开发》,在我看来这是一本很棒的书。在状态机章节中,我想出了以下代码:

defmodule IslandsEngine.Rules do
  alias __MODULE__

  defstruct state: :initialized

  def new(), do: %Rules{}

  def check(%Rules{state: :initialized} = rules, :add_player), do:
    {:ok, %Rules{rules | state: :players_set}}

  def check(_state, _action), do: :error

end
Run Code Online (Sandbox Code Playgroud)

上面的代码应该作为一个功能齐全的状态机工作。我将在上面粘贴一些iex命令:

iex(1)> alias IslandsEngine.Rules
IslandsEngine.Rules

iex(2)> rules = Rules.new()
%IslandsEngine.Rules{state: :initialized}

iex(3)> {:ok, rules} = Rules.check(rules, :add_player)
{:ok, %IslandsEngine.Rules{state: :players_set}}

iex(4)> rules.state
:players_set
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,状态结构已从 更改:initialized:add_player。伟大的。

我的问题是:state:struct 真的是不可变的吗?我的意思是,该方法check/1返回带有语句的结构副本state: :players_set,该语句遵循正确的功能模式......但是它如何“覆盖”当前状态而不直接修改它? …

erlang struct elixir-mix elixir elixir-iex

3
推荐指数
1
解决办法
465
查看次数

连接到“Iex”或“morningstar”并检索数据

我尝试从 iex 或 Morningstar 检索历史财务数据。为此,我使用以下代码。

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader.data as web
import datetime

start = datetime.datetime(2019, 1, 1)
end = datetime.datetime(2019, 1, 10)
facebook = web.DataReader("FB", 'morningstar', start, end)

print(facebook.head())
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到错误消息:

NotImplementedError:data_source='morningstar' 未实现

或者

ValueError:必须通过 api_key 变量或环境变量 IEX_API_KEY 提供 IEX Cloud API 密钥

取决于我使用的两个来源中的哪一个。

我尝试过了

pip uninstall pandas-datareader
pip install pandas-datareader
Run Code Online (Sandbox Code Playgroud)

多次并重新启动内核,但没有任何变化。这个 API 是否有任何变化或者我做错了什么?

python-3.x pandas pandas-datareader elixir-iex

3
推荐指数
1
解决办法
8124
查看次数