gpt4 book ai didi

formatting - Iex 中是否有默认启用千位分组(100_000)的开关

转载 作者:行者123 更新时间:2023-12-02 09:30:11 28 4
gpt4 key购买 nike

请问 Iex 中是否有默认启用千位分组(例如 100_000)的开关。如果是的话,那将非常有帮助。

否则我们如何在IO.puts中指定它?

最佳答案

没有 native 选项可以启用数字分组,如您根据Inspect.Opts所述。 .

但是,如果将 IExIntegerFloat 一起使用时,以下内容应该可以覆盖检查的行为(如果将其放置在本地) ~/.iex.exs 文件:

defmodule PrettyNumericInspect do
def group(value, :binary, true),
do: value |> group_by(8)
def group(value, :decimal, true),
do: value |> group_by(3)
def group(value, :hex, true),
do: value |> group_by(2)
def group(value, :octal, true),
do: value |> group_by(4)
def group(value, _, _),
do: value

defp group_by(value, n) when byte_size(value) > n do
size = byte_size(value)
case size |> rem(n) do
0 ->
(for << << g :: binary-size(n) >> <- value >>,
into: [],
do: g)
|> Enum.join("_")
r ->
{head, tail} = value |> String.split_at(r)
[head, group_by(tail, n)] |> Enum.join("_")
end
end
defp group_by(value, _),
do: value
end

defimpl Inspect, for: Float do
def inspect(thing, %Inspect.Opts{pretty: pretty}) do
[head, tail] = IO.iodata_to_binary(:io_lib_format.fwrite_g(thing))
|> String.split(".", parts: 2)
[PrettyNumericInspect.group(head, :decimal, pretty), tail]
|> Enum.join(".")
end
end

defimpl Inspect, for: Integer do
def inspect(thing, %Inspect.Opts{base: base, pretty: pretty}) do
Integer.to_string(thing, base_to_value(base))
|> PrettyNumericInspect.group(base, pretty)
|> prepend_prefix(base)
end

defp base_to_value(base) do
case base do
:binary -> 2
:decimal -> 10
:octal -> 8
:hex -> 16
end
end

defp prepend_prefix(value, :decimal), do: value
defp prepend_prefix(value, base) do
prefix = case base do
:binary -> "0b"
:octal -> "0o"
:hex -> "0x"
end
prefix <> value
end
end

Inspect.Opts 选项 :pretty 必须设置为 true 才能显示数字分组。根据 IEx.configure/1 的文档默认情况下应该启用漂亮检查。

启动 iex 时,您将看到 2 个有关重新定义 Inspect.FloatInspect.Integer 的警告,但它应该继续像下面那样工作之后正常:

iex> 100_000
100_000
iex> 100_000.1
100_000.1

它还支持不同 :base 选项的分组(:binary:decimal:octal:hex):

iex> inspect 0b11111111_11111111, base: :binary, pretty: true
"0b11111111_11111111"
iex> inspect 999_999, base: :decimal, pretty: true
"999_999"
iex> inspect 0o7777_7777, base: :octal, pretty: true
"0o7777_7777"
iex> inspect 0xFF_FF, base: :hex, pretty: true
"0xFF_FF"

关于formatting - Iex 中是否有默认启用千位分组(100_000)的开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34064900/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com