Kev*_*vin 27 string-concatenation elixir
在Elixir中,您可以使用<>运算符连接字符串,例如"Hello" <> " " <> "World".
您还可以使用管道运算符|>将函数链接在一起.
我正在尝试编写Elixir代码来格式化在线游戏的货币.
def format_price(price) do
price/10000
|> Float.round(2)
|> to_string
|> <> "g"
end
Run Code Online (Sandbox Code Playgroud)
以上结果导致语法错误.我是否忽略了可以连接字符串的基本功能?我知道我可以自己定义一个,但如果我可以避免它,那似乎在我的代码中创建了不必要的混乱.
我意识到我可以通过简单地将方法链接在一起来完成同样的事情,to_string(Float.round(price/10000, 2)) <> "g"但是这种语法并不像阅读那么好,并且如果我想在以后添加步骤,那么将来扩展该方法会更加困难. .
Elixir是否有方法使用管道运算符连接文本,或者如果没有自己定义方法,这是不可能的?
Dog*_*ert 39
是的,你可以通过传递函数的完整路径,在这种情况下是Kernel.<>:
iex(1)> "foo" |> Kernel.<>("bar")
"foobar"
Run Code Online (Sandbox Code Playgroud)
我意识到我可以通过简单地将方法链接在一起来完成同样的事情,例如to_string(Float.round(price/10000,2))<>"g",但这种语法不是很好阅读,它使它成为现实如果我想在两者之间添加步骤,将来更难以扩展该方法.
您可以使用插值而不是连接.例如,你可以这样做,它仍然可以阅读,简单,易于修改:
def format_price(price) do
price = (price / 10000) |> Float.round(2)
"#{price}g"
end
Run Code Online (Sandbox Code Playgroud)
回答你的问题:
Elixir是否有方法使用管道运算符连接文本,或者如果没有自己定义方法,这是不可能的?
正如@Dogbert 在其他答案中所提到的,你可以使用Kernel.<>/2
另一种解决方案是将其包装在匿名函数中.
def format_price(price) do
(price / 10000)
|> Float.round(2)
|> to_string()
|> (&<>/2).("g")
end
Run Code Online (Sandbox Code Playgroud)
要么
def format_price(price) do
(price / 10000)
|> Float.round(2)
|> to_string()
|> (&(&1 <> "g")).()
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5483 次 |
| 最近记录: |