2016-08-19 130 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