我花了過去的一兩個下午或兩個戳到我的電腦上,就好像我以前從未見過一樣。今天的話題列表將字符串中的每一個其他字母都大寫 - 列表中的每個其他字母大寫
的練習是一個字符串並將利用其他字母。我沒有走得太遠......
讓我們列出x = String.toList "abcde"
並嘗試分析它。如果我們加take 1
和drop 1
結果我們回到原來的列表
> x = String.toList "abcde"
['a','b','c','d','e'] : List Char
> (List.take 1 x) ++ (List.drop 1 x)
['a','b','c','d','e'] : List Char
我想head
和tail
做同樣的事情,但我得到一個很大的錯誤消息:
> [List.head x] ++ (List.tail x)
==================================== ERRORS ====================================
-- TYPE MISMATCH --------------------------------------------- repl-temp-000.elm
The right argument of (++) is causing a type mismatch.
7│ [List.head x] ++ (List.tail x)
^^^^^^^^^^^
(++) is expecting the right argument to be a:
List (Maybe Char)
But the right argument is:
Maybe (List Char)
Hint: I always figure out the type of the left argument first and if it is
acceptable on its own, I assume it is "correct" in subsequent checks. So the
problem may actually be in how the left and right arguments interact.
錯誤信息告訴我很多問題。不是100%確定我會如何解決它。加盟運營商++
名單期待[Maybe Char]
,而是得到Maybe [Char]
讓我們只是試圖利用在字符串中的第一個字母(這是不太爽,但實際上現實的)。
[String.toUpper (List.head x)] ++ (List.drop 1 x)
這是錯誤的,因爲Char.toUpper
需要String
,而是List.head x
是Maybe Char
。
[Char.toUpper (List.head x)] ++ (List.drop 1 x)
這也錯了,因爲Char.toUpper
需要Char
,而不是Maybe Char
。
在現實生活中,用戶可以通過鍵入非Unicode字符(如表情符號)來打破腳本。所以也許榆樹的反饋是正確的。這應該是一個簡單的問題,它需要「abcde」並變成「AbCdE」(或可能是「aBcDe」)。如何正確處理錯誤?
- JavaScript中的同一個問題:How do I make the first letter of a string uppercase in JavaScript?