JS'den bir kitaplık yüklemeye çalışıyorum ve bir dizeyi veya dizeleri içeren bir işlevi aldım. Bir dize verildiyse, onu bir dizeler listesine böler ve sonra bunu ilk etapta geçirmiş gibi devam eder.Elm'de bir fonksiyonun birden fazla türü almasını sağlayabilir misiniz? Aşırı fonksiyon var mı?
Kendi türümü tanımlayarak bunu yapabilirim, ancak API'yi çirkin kılıyor ve verilerinizi özel bir Tür öneki gerektiriyor. Ben liman bu tür davranışları desteklemesi gerektiğini sanmıyorum, Nihayetinde
type DocumentBody = Raw String | Words List String
tokenize: DocumentBody -> List String
tokenize s =
case s of
Raw str_body -> String.split " " str_body |> (List.map String.toLower)
Words list_body -> List.map String.toLower list_body
-- Tests
tests =
suite "Tokenizer"
[ test "simple" <| assertEqual ["this", "is", "a", "simple", "string"]
<| tokenize (Raw "this is a simple string")
, test "downcasing tokens: string" <| assertEqual ["foo", "bar"]
<| tokenize (Raw "FOO BAR")
, test "downcasing tokens: list of str" <| assertEqual ["foo", "bar"]
<| tokenize (Words ["Foo", "BAR"])
]
, ama nasıl yerine türünden sadece numaralandırma üzerinde size desen maçı yapın: İşte
bende ne var örneğimdeRaw
veya
Words
önekine mi ihtiyaç duyuyorsunuz?
"... işlev imzalarını çoğaltamazsınız ..." veya tam olarak bunların eksikliğini çoğaltabilirsiniz;) –
sizin noktanıza, şimdi arayan kişinin bir DocumentBody'nin ne olduğunu bilmesi gerekiyor, Bu fonksiyonun aldığı türden bu yana, "Ham" ve "Kelimeler" öneklerini –
sağa doğru göstermesi mantıklıdır, ve bu da bağlantı noktaları üzerinden temiz bir şey değildir, bu yüzden onu bölmeye doğru eğilmeyi tercih ederim. ayrı işlevler. –