點燈坊

失くすものさえない今が強くなるチャンスよ

使用 apply() 實踐 map()

Sam Xiao's Avatar 2024-06-01

Go 並沒有內建 map(),但 Hugo 則提供 apply() 類似 map() 功能。

Version

Hugo 0.126.2

Template

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    {{ $title := "Hugo Lab" }}
    <title>{{ $title }}</title>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    {{ $companies := slice "apple" "google" "microsoft" }}
    {{ $companies = apply $companies "strings.FirstUpper" "." }}
    <ul>
      {{ range $companies }}
        <li>{{ . }}</li>
      {{ end }}
    </ul>
  </body>
</html>

Line 11

{{ $companies := slice "apple" "google" "microsoft" }}
  • slice():定義 $companies slice

Line 12

{{ $companies = apply $companies "strings.FirstUpper" "." }}
  • apply():類似 JavaScript 的 map()
    • 第一個參數:傳入 Collection 名稱
    • 第二個參數:傳入 function 名稱,必須以 String 形式傳入,而非 function
  • 因為 apply() 無法搭配 pipe,只能再回傳到原來的變數

Line 13

<ul>
  {{ range $companies }}
    <li>{{ . }}</li>
  {{ end }}
</ul>
  • range():列舉 slice

Conclusion

  • Hugo 並非完全支援 FP,apply() 應該將第一個參數放到最後支援 pipe,且第二個參數也無法直接傳入 function,只能以 String 方式傳入 function 名稱

Reference

Hugo, collections.Apply