在Iex中是否有默认启用千位分组(100_000)的Switch

时间:2015-12-03 11:30:05

标签: formatting elixir iex

Iex中默认启用千位数分组(例如100_000)。如果是,那将非常有用。

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

1 个答案:

答案 0 :(得分:5)

根据Inspect.Opts所述,没有启用数字分组的原生选项。

但是,如果将function getDB() { $dbConnection = new pdo('mysql:unix_socket=/cloudsql/<your-project-id>:<your-instance-name>;dbname=<database-name>', 'root', // username '' // password ); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $dbConnection; } 放在本地IEx文件中,IntegerFloat一起使用时,以下内容应该可以覆盖检查行为:

~/.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才能显示数字分组。根据{{​​3}}的文档,默认情况下应启用pretty inspect。

启动true时,您会看到有关重新定义iexInspect.Float的2条警告,但之后应继续正常工作:

Inspect.Integer

它还支持不同iex> 100_000 100_000 iex> 100_000.1 100_000.1 选项(:base:binary:decimal:octal)的分组:

:hex