ここでは、ディクショナリ関数の構文、説明、パラメーター、戻り値、例について記述します。

set

この関数は、次のように記述されます。
  • 構文:set(d, k, v)
  • 説明

    この関数を呼び出して、d パラメーターによって指定されたディクショナリの k/v ペアを設定します。

  • パラメーター
    • d: ディクショナリの名前。
    • k: キー。Data type : 任意の型。
    • v: 値。Data type : 任意の型。
  • 戻り値

    この関数は、true を返します。

    • 例 1
      outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
      say(concat('keys[1]=', get(outer_keys, 1)))
      say(concat('keys[2]=', get(outer_keys, 2)))
      
      inner_keys=[]
      set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d1674')
      set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
      
      def echo_each(k, v, u) {
          s = concat('keys[', k, ']=', v)
          say(s)
      }
      foreach(inner_keys, echo_each, [])
      
      Output:
      keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
      keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
      keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
      keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              
    • 例 2
      d_inner = []
      set(d_inner, 'name', 'inner dsl')
      
      d_outer = []
      set(d_outer, 'dictA', d_inner)
      
      v = get(d_outer, 'dictA')
      if v {
          v = get(v, 'name')
          if v {
              add_rsp_header('X-DSL-NESTED-DICT', v)
          }
      }
      
      Output: Add a response header.
      X-DSL-NESTED-DICT: inner dsl

get

この関数は、次のように記述されます。
  • 構文:get(d, k)
  • 説明

    この関数を呼び出して、ディクショナリ (d) から、キー (k) に対応する値 (v) を取得します。

  • パラメーター
    • d: ディクショナリの名前。
    • k: キー。 Data type : 任意の型。
  • 戻り値

    この関数は、成功した場合は対応する値を返し、失敗した場合は false を返します。

  • outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
    say(concat('keys[1]=', get(outer_keys, 1)))
    say(concat('keys[2]=', get(outer_keys, 2)))
    
    inner_keys=[]
    set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d1674')
    set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
    
    def echo_each(k, v, u) {
        s = concat('keys[', k, ']=', v)
        say(s)
    }
    foreach(inner_keys, echo_each, [])
    
    Output:
    keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
    keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
    keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
    keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              

foreach

この関数は、次のように記述されます。
  • 構文:foreach (d, f, user_data)
  • 説明
    • この関数を呼び出して、ディクショナリ (d) の要素をスキャンし、各要素に対してコールバック関数 (f)を実行します。
    • f(key, value, user_data)構文の f 構文のパラメーターを指定します。
    • f() 関数が false を返した場合、 foreach() ループは終了します。
  • パラメーター
    • d: ディクショナリの名前。
    • f: コールバック関数。
    • user_data: 送信するユーザーデータ。Data type: ディクショナリ。
  • 戻り値

    この関数は必ず true を返します。

    • 例 1
      outer_keys=['e66fd4aa-f281-472f-b919-fc7e7474de25', '66fee78d-1887-42ec-9119-a9b50b7fbca2']
      say(concat('keys[1]=', get(outer_keys, 1)))
      say(concat('keys[2]=', get(outer_keys, 2)))
      
      inner_keys=[]
      set(inner_keys, 'dev', '243390eb-00b7-4551-a6b8-021bb34d1674')
      set(inner_keys, 'zeus', '4747d33b-12b0-45e6-ac10-a8e191d6adaa')
      
      def echo_each(k, v, u) {
          s = concat('keys[', k, ']=', v)
          say(s)
      }
      foreach(inner_keys, echo_each, [])
      
      Output:
      keys[1]=e66fd4aa-f281-472f-b919-fc7e7474de25
      keys[2]=66fee78d-1887-42ec-9119-a9b50b7fbca2
      keys[dev]=243390eb-00b7-4551-a6b8-021bb34d1674
      keys[zeus]=4747d33b-12b0-45e6-ac10-a8e191d6adaa                                                                                                                                              
    • 例 2
      M3U8 スライスの最初の 2 件を出力し、foreach ループを終了します。
      def echo_each(k, v, u) {
          say(v)
      
          if match_re(v, '.*ts') {
              ts_cnt = get(u, 'ts_cnt')
              ts_cnt = add(ts_cnt, 1)
              set(u, 'ts_cnt', ts_cnt)
      
              if ge(ts_cnt, 2) {
                  return false
              }
          }
      }
      
      m3u8 = ''
      m3u8 = concat(m3u8, '#EXTM3U8', '\n')
      m3u8 = concat(m3u8, '#EXT-X-MEDIA-SEQUENCE:140651513\n')
      m3u8 = concat(m3u8, '#EXT-X-TARGETDURATION:10\n')
      m3u8 = concat(m3u8, '#EXTINF:8,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651513.ts\n')
      m3u8 = concat(m3u8, '#EXTINF:9,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651514.ts\n')
      m3u8 = concat(m3u8, '#EXTINF:10,\n')
      m3u8 = concat(m3u8, 'http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651515.ts\n')
      
      lines = split(m3u8, '\n')
      u = []
      set(u, 'ts_cnt', 0)
      foreach(lines, echo_each, u)
      
      Output:
      #EXTM3U8
      #EXT-X-MEDIA-SEQUENCE:140651513
      #EXT-X-TARGETDURATION:10
      #EXTINF:8,
      http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651513.ts
      #EXTINF:9,
      http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514_140651514.ts