2016-08-19 4 views
1

Ich versuche, eine einfache Funktion zu schreiben, um einen Strom von Wörtern in Titel zu verwandeln. Allerdings bin ich auf die Restrukturierung der resultierenden Tupel von titlecase_once hängen und verketten die Ergebnisse. In JavaScript würde ich ein Semikolon verwenden, um die Anweisungen zu trennen, aber ich bin mir nicht sicher, was ich hier tun soll.Separate Anweisungen in anonymen Funktionen

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

Welche Ausgabe wollen Sie für 'fooBAR'? 'Foobar' oder' FooBAR'? – Dogbert

+0

@Dogbert Dies ist nur ein Dummy-Snippet, also ist es mir nicht besonders wichtig. Sagen wir "Foobar" für Konsistenz? – jocull

+0

Wenn 'Foobar' in Ordnung ist, könntest du nicht' String.capitalize/1' verwenden? – Dogbert

Antwort

1

Wie wäre es mit so etwas? Es braucht zwei Karten, aber es ist klarer, denke ich.

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

Oder mit einer Funktion:

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

Oder das gleiche, aber in einer Zeile:

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

Ich mag das für kurze Dinge, aber es fühlt sich ein bisschen albern an, dass ich einfach den Artikel in der ersten Map entschlüsseln und zurückgeben kann. Gibt es eine idiomatische Möglichkeit, Aussagen in Elixir zu trennen oder ist dies ausdrücklich nicht erlaubt? Ich habe dazu keine Dokumentation gefunden. – jocull

+0

Ich kann keine vernünftige Art und Weise zu tun, wenn Sie speziell die kurze Funktionsform verwenden möchten. Man könnte es auf zwei Zeilen mit der üblichen Funktionsform setzen, aber wenn das auch zu lang ist, bin ich mir nicht sicher. – JustMichael

+0

Das ist in Ordnung, ich habe nicht versucht, die Kurzform gezielt zu verwenden. Wenn es in der langen Form auf mehreren Zeilen funktioniert, kann ich ein Beispiel sehen? (Ich habe gerade versucht, dies in "iex" so weit zu tun) – jocull

Verwandte Themen