用字符串连接__MODULE__

时间:2016-02-02 12:55:01

标签: elixir

如何将__MODULE__与字符串连接起来?

temp = __MODULE__<> " /布拉布拉"不起作用

如果__MODULE__是Elixir.Tasks.Process.Lixo而不是我需要temp var

" Elixir.Tasks.Process.Lixo /布拉布拉"

2 个答案:

答案 0 :(得分:4)

__MODULE__只是引用您当前的模块。它返回一个原子,不能与字符串连接。为此,您需要将其转换为to_string/1的字符串:

to_string(Elixir.Tasks.Process.Lixo) <> "/foo"
# => "Elixir.Tasks.Process.Lixo/foo"

您还可以使用隐式调用to_string/1的字符串插值:

"#{Elixir.Tasks.Process.Lixo}/foo"
# => "Elixir.Tasks.Process.Lixo/foo"

答案 1 :(得分:1)

您可以使用Module.concat。例如:

Module.concat(Foo.Bar, Baz)    # => Foo.Bar.Baz
Module.concat([Foo, Bar, Baz]) # => Foo.Bar.Baz
Module.concat(__MODULE__, Baz) # => Foo.Bar.Baz if current module is Foo.Bar

这样做可以使它像你期望的那样保持原子,避免转换成二进制和后退等。