Elixir 简单字符串和整数管道在模板辅助对象中不起作用

Elixir 简单字符串和整数管道在模板辅助对象中不起作用,elixir,phoenix-framework,Elixir,Phoenix Framework,我将此代码放在模板中(html.eex文件): String.replace(“px”和“”)|>Integer.parse>(*0.8)%> 其中@width是“125px” 我有两个错误: 1) 未为{125,“}实施协议Phoenix.HTML.Safe 2) “*”之前的语法错误 这是否意味着不可能在模板帮助器中使用这样的管道,或者我没有正确编写它?这里有几个问题 首先,管道的末尾不是对函数的调用: iex> 125 |> (*0.8) ** (SyntaxError) i

我将此代码放在模板中(
html.eex
文件):

String.replace(“px”和“”)|>Integer.parse>(*0.8)%>
其中
@width
“125px”

我有两个错误:

1) 未为{125,“}实施协议Phoenix.HTML.Safe

2) “*”之前的语法错误


这是否意味着不可能在模板帮助器中使用这样的管道,或者我没有正确编写它?

这里有几个问题

首先,管道的末尾不是对函数的调用:

iex> 125 |> (*0.8)
** (SyntaxError) iex:6: syntax error before: '*'
你想要的是:

iex> 125 |> Kernel.*(0.8)
100.0
其次,返回一个元组:

iex> Integer.parse("125")
{125, ""}
您可以改为使用:

导致:

<%= @width |> String.replace("px", "") |> String.to_integer() |> Kernel.*(0.8) %>
String.replace(“px”和“”)|>String.to_integer()|>内核。*(0.8)%>
如果使用Integer.parse,则不需要String.replace,但需要从元组中获取元素:

<%= @width |> Integer.parse() |> elem(0) |> Kernel.*(0.8) %>
Integer.parse()|>elem(0)|>Kernel.*(0.8)%>
<%= @width |> String.replace("px", "") |> String.to_integer() |> Kernel.*(0.8) %>
<%= @width |> Integer.parse() |> elem(0) |> Kernel.*(0.8) %>