我正在尝试将 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)
这可以完成工作,但就像我说的那样,我只是想知道是否有更好的解决方案。
提前致谢
我正在阅读 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 …
要获取 IEx 中模块上所有函数的列表,我可以运行:
Map.__info__(:functions)
# or
Enum.__info__(:functions)
Run Code Online (Sandbox Code Playgroud)
使用{Module}.__info__(:functions)格式。
如何获取所有标准库模块的列表?
有可用的 vim 模式吗iex?也就是说,类似于set -o vibash 中的东西。
这是我的版本信息:IEx 1.13.0 (compiled with Erlang/OTP 24)
我正在运行它Linux Mint 20.2 Uma。
这不是最有见地的问题,但我真的希望能够按 Control-L 并让 shell iex 清除屏幕。知道如何做到这一点,或者是否有另一个带有此内置功能的长生不老药外壳?
在 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)
有一种方法可以让这一切自动发生。
所以我有一个遵循以下布局的应用程序模块:
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 的管道链中,将管道放在行的开头是标准的:
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) 我目前正在学习 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,该语句遵循正确的功能模式......但是它如何“覆盖”当前状态而不直接修改它? …
我尝试从 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 是否有任何变化或者我做错了什么?
elixir-iex ×10
elixir ×9
elixir-mix ×2
erlang ×1
math ×1
pandas ×1
pipe ×1
python-3.x ×1
struct ×1