Lambda 匿名函数中的独立语句

Lambda 匿名函数中的独立语句,lambda,elixir,Lambda,Elixir,我正在尝试编写一个简单的函数,将一系列单词转换为标题大小写。然而,我对从titlecase\u一次重新构造生成的元组并将结果连接在一起感到很不安。在JavaScript中,我会使用分号来分隔语句,但我不确定在这里要做什么 Stream.cycle(~w{ red white blue }) |> Stream.map(&({h,t} = String.Casing.titlecase_once(&1)) # How do we return `h <> t`

我正在尝试编写一个简单的函数,将一系列单词转换为标题大小写。然而,我对从
titlecase\u一次
重新构造生成的元组并将结果连接在一起感到很不安。在JavaScript中,我会使用分号来分隔语句,但我不确定在这里要做什么

Stream.cycle(~w{ red white blue })
  |> Stream.map(&({h,t} = String.Casing.titlecase_once(&1)) # How do we return `h <> t` here?
  |> Enum.take(7)
Stream.cycle(~w{红-白-蓝})
|>Stream.map(&({h,t}=String.Casing.titlecase_once(&1))#我们如何在这里返回'hth'?
|>列举(7)

类似的东西怎么样?它需要两张地图,但我认为更清晰

Stream.cycle(~w{ red white blue })
|> Stream.map(&(String.Casing.titlecase_once(&1)))
|> Stream.map(fn({h,t}) -> h <> t end)
|> Enum.take(7)
Stream.cycle(~w{红-白-蓝})
|>流图(&(管柱、套管、标题库一次(&1)))
|>map(fn({h,t})->htend)
|>列举(7)
或使用一个功能:

Stream.cycle(~w{ red white blue })
|> Stream.map(fn(word) ->
  {h,t} = String.Casing.titlecase_once(word)
  h <> t
end)
|> Enum.take(7)
Stream.cycle(~w{红-白-蓝})
|>Stream.map(fn(word)->
{h,t}=String.Casing.titlecase_一次(word)
h t
(完)
|>列举(7)
或相同,但在一行中:

Stream.cycle(~w{ red white blue })
|> Stream.map(fn(word) -> {h,t} = String.Casing.titlecase_once(word); h <> t end)
|> Enum.take(7)
Stream.cycle(~w{红-白-蓝})
|>Stream.map(fn(word)->{h,t}=String.Casing.titlecase_once(word);htend)
|>列举(7)

我喜欢这种简短的方式,但如果我可以在第一个映射中浓缩并返回项目,这确实有点傻。有没有一种惯用的方法来分隔Elixir中的语句,还是特别禁止使用?我没有找到任何关于这方面的文档。如果你想特别使用简短的乐趣,我想不出一种明智的方法Action表单。你可以用通常的函数表单把它放在两行上,但是如果太长,那么我就不确定了。没关系,我并没有特别尝试使用短表单。如果它在多行上以长表单工作,我可以看到一个示例吗?(到目前为止,我只是在
iex
中尝试这么做)我已经更新了答案。我想可能有一种更简单的方法。让我们等待其他答案。你希望
fooBAR
的输出是什么?
fooBAR
fooBAR
?@Dogbert这只是一个虚拟片段,所以我并不特别在意。让我们说
fooBAR
以保持一致性?如果
fooBAR
很好,你能不能只用
String.capitalize/1
?是的,那就行了!谢谢,我还在学习stdlib。