如何将管道占位符传递给函数中的第二个参数?
defdefmodule CamelCase do
str = "The_Stealth_Warrior"
def to_camel_case(str) do
str
|> Regex(~r/_/, 'need_to_pass_str_argument_here', "")
|> String.split(" ")
|> Enum.map(&(String.capitalize(&1)))
|> List.to_string
end
end
ExUnit.start
defmodule TestCamelCase do
use ExUnit.Case
import CamelCase, only: [to_camel_case: 1]
test "to_camel_case" do
assert to_camel_case("The_Stealth_Warrior") == "TheStealthWarrior"
end
end
# Error
iex>
** (FunctionClauseError) no function clause matching in Regex.replace/4
(elixir) lib/regex.ex:504: Regex.replace("The_Stealth_Warrior", ~r/\W/, " ", [])
答案 0 :(得分:4)
要使用管道将字符串作为第二个参数传递,您可以使用匿名函数:
iex(1)> "The_Stealth_Warrior" |> (fn s -> Regex.replace(~r/_/, s, "") end).()
"TheStealthWarrior"
但是,对于这种特定情况,您可以使用String.replace/3
代替String接受String作为第一个参数,将Regex作为第二个参数:
iex(2)> "The_Stealth_Warrior" |> String.replace(~r/_/, "")
"TheStealthWarrior"
(\W
与_
不符,因此我将其更改为演示目的。)