2016-08-19 86 views
1

我正在尝试编写一个简单的函数来将单词流转换为标题大小写。但是,我挂上了从titlecase_once重组得到的元组,并将结果连接起来。在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) 
+0

你想卖'fooBAR'输出什么? 'Foobar'或'FooBAR'? – Dogbert

+0

@Dogbert这只是一个虚拟片段,所以我并不特别在意。让我们说'FooBAR'的一致性? – jocull

+0

如果'Foobar'很好,你不能只用'String.capitalize/1'吗? – Dogbert

回答

1

这样的事情呢?它需要两张地图,但我认为更清楚。

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{ red white blue }) 
|> Stream.map(fn(word) -> 
    {h,t} = String.Casing.titlecase_once(word) 
    h <> t 
end) 
|> Enum.take(7) 

还是相同的,但在同一行:

Stream.cycle(~w{ red white blue }) 
|> Stream.map(fn(word) -> {h,t} = String.Casing.titlecase_once(word); h <> t end) 
|> Enum.take(7) 
+0

我喜欢这个简短的事情,但它确实感到有点傻,我可以连接并返回第一个地图中的项目。在Elixir中是否有一种惯用的方式来分开陈述或者是否特别禁止?我发现这个零文件。 – jocull

+0

如果你想特别使用短的函数形式,我不能想出一个完美的方法来做到这一点。你可以用通常的函数形式将它放在两行上,但如果这太长了,那我也不确定。 – JustMichael

+0

这很好,我没有试图具体使用简短的表格。如果它在多行上以长格式工作,我可以看到样本吗? (到目前为止,我一直试图在'iex'中这样做) – jocull