.Scratch

将以下英文翻译为中文:

.Scratch

https://gohugo.io/functions/scratch/

​ 该函数用作 “草稿本”,用于存储和操作数据。

​ Scratch 是 Hugo 的一个功能,旨在方便地在 Go 模板中操纵数据。它是一个 Page 或 简码方法,其结果数据将被附加到给定的上下文中,或者它可以作为存储在变量中的唯一实例。

​ 请注意,Scratch 最初是作为一个解决方案创建的,以解决影响 0.48 版本之前的 Hugo 的Go 模板作用域限制问题。有关.Scratch和上下文用例的详细分析,请参阅这篇博客文章

带有上下文的 .Scratch vs. 本地的 newScratch

​ 自 Hugo 0.43 起,有两种使用 Scratch 的不同方式:

页面的 .Scratch

.Scratch 作为Page 方法或 简码方法可用,并将“草稿”数据附加到给定页面上。使用 .Scratch 必须要在 Page 或 简码上下文中。

1
2
3
4
{{ .Scratch.Set "greeting" "bonjour" }}
{{ range .Pages }}
  {{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
{{ end }}

本地的 newScratch

​ 使用 newScratch 函数,可以将 Scratch 实例分配给任何变量。 在这种情况下,不需要Page 或 简码上下文,而 Scratch 的作用域仅为本地。以下方法可以从已分配 Scratch 实例的变量中使用:

1
2
{{ $data := newScratch }}
{{ $data.Set "greeting" "hola" }}

方法

​ Scratch 具有以下方法:

​ 请注意,以下示例假设已在 $scratch 中存储了 本地 Scratch 实例

.Set

​ 设置给定键的值。

1
{{ $scratch.Set "greeting" "Hello" }}

.Get

​ 获取给定键的值。

1
2
3
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Get "greeting" }} > Hello

.Add

​ 将给定值添加到给定键的现有值中。

​ 对于单个值,Add接受支持 Go 的 + 运算符的值。如果某个键的第一个 Add 是一个数组或切片,则后续添加的内容将追加到该列表中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{{ $scratch.Add "greetings" "Hello" }}
{{ $scratch.Add "greetings" "Welcome" }}
----
{{ $scratch.Get "greetings" }} > HelloWelcome
{{ $scratch.Add "total" 3 }}
{{ $scratch.Add "total" 7 }}
----
{{ $scratch.Get "total" }} > 10
{{ $scratch.Add "greetings" (slice "Hello") }}
{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
----
{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}

.SetInMap

Takes a key, mapKey and value and adds a map of mapKey and value to the given key.

​ 接收一个 keymapKeyvalue ,并将 mapKeyvalue 的映射添加到给定的 key 中。

1
2
3
4
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello]

.DeleteInMap

Takes a key and mapKey and removes the map of mapKey from the given key.

​ 接收一个 keymapKey ,并从给定的 key 中删除 mapKey 的映射。

1
2
3
4
5
6
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ .Scratch.DeleteInMap "greetings" "english" }}
----
{{ .Scratch.Get "greetings" }} > map[french:Bonjour]

.GetSortedMapValues

Return an array of values from key sorted by mapKey.

​ 按 mapKey 排序,返回 key 中的值数组。

1
2
3
4
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]

.Delete

Remove the given key.

​ 删除给定的键。

1
2
3
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Delete "greeting" }}

.Values

Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via newScratch, not .Page.Scratch etc., as that will lead to concurrency issues.

​ 返回原始的后备映射。注意,只应在通过 newScratch 获得的局部范围的Scratch实例上使用此方法,而不是 .Page.Scratch 等,因为会导致并发问题。

另请参阅