|>運算子稱為管線運算子。它可以把多個函式呼叫串接在一起,讓前一個函式呼叫回傳的值傳給下一個函式呼叫。
"hello"
|> string.uppercase
|> string.append("?!")
// -> "HELLO?!"
上面這段程式碼等同於下面這一段:
string.append(string.uppercase("hello"), "?!")
管線運算子會把值當作函式呼叫的第一個引數傳入,或是把它當作新呼叫的唯一引數傳入,並自動選擇型別正確的那一種。
100
|> function_that_takes_two_arguments(1)
// Is equivalent to
function_that_takes_two_arguments(100, 1)
100
|> function_that_returns_a_function(1)
// Is equivalent to
function_that_returns_a_function(1)(100)
有時候我們想把值傳到其他位置,這時候可以用_佔位符來指出值應該插入的地方。
100
|> some_function(1, _, 2)
在這個練習中,你會幫助高中情侶在社群媒體上公開示愛,用他們的縮寫產生一個 ASCII 愛心:
****** ******
** ** ** **
** ** ** **
** * **
** **
** J. K. + M. B. **
** **
** **
** **
** **
** **
** **
***
*
實作first_letter函式。它應該接收一個名字並回傳它的第一個字母。它應該清除名字中任何多餘的空白。
first_letter("Jane")
// -> "J"
實作initial函式。它應該接收一個名字,回傳大寫的第一個字母,後面接著一個點。記得重複使用你在前一步定義的first_letter。
initial("Robert")
// -> "R."
實作initials函式。它應該接收一個全名,全名由以空格分隔的名字和姓氏組成,並回傳縮寫。記得重複使用你在前一步定義的initial。
initials("Lance Green")
// -> "L. G."
實作pair函式。它應該接收兩個全名,並回傳放在 ASCII 愛心內的縮寫。記得重複使用你在前一步定義的initials。
pair("Blake Miller", "Riley Lewis")
// -> "
// ****** ******
// ** ** ** **
// ** ** ** **
// ** * **
// ** **
// ** B. M. + R. L. **
// ** **
// ** **
// ** **
// ** **
// ** **
// ** **
// ***
// *
// "