这个Enum.reduce和String.replace组合的正确公式是什么?

时间:2017-04-16 13:40:19

标签: mapreduce elixir tail-recursion

在下面的代码中,structList是一个结构列表,每个key是模板中的一个字符串,value是替代。

%ParamStruct{default: "Greater London", description: "Region",
 key: "ca_cert_subj_state", label: "State/County", order: 99, required: false,
 value: "Greater London"}

因此,在上面的keyca_cert_subj_state且价值为Greater London

这是替换的字符串:

sslCmd = """
openssl req -x509 -new -nodes -sha256 \
 -key {{key-file-pass}}.key \
 -days 3650 \
 -out {{key-file-pass}}.pem \
 -subj ""\
/C={{ca_cert_subj_country}}\
/ST={{ca_cert_subj_state}}\
/L={{ca_cert_subj_location}}\
/O={{ca_cert_subj_organization}}\
/OU={{ca_cert_subj_org_unit}}\
/CN={{ca_cert_subj_common_name}}\
/emailAddress={{ca_cert_email}}\
"""
Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> sslCmd = String.replace(sslCmd, "{{#{x.key}}}", x.value)
  end)

这段代码应该累积更改sslCmd中的字符串的结果,但显然不起作用。我不确定它应如何递归或迭代。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为两个名为from pydub import AudioSegment sound = AudioSegment.from_file(…) def speed_change(sound, speed=1.0): # Manually override the frame_rate. This tells the computer how many # samples to play per second sound_with_altered_frame_rate = sound._spawn(sound.raw_data, overrides={ "frame_rate": int(sound.frame_rate * speed) }) # convert the sound with altered frame rate to a standard frame rate # so that regular playback programs will work right. They often only # know how to play audio at standard frame rate (like 44.1k) return sound_with_altered_frame_rate.set_frame_rate(sound.frame_rate) slow_sound = speed_change(sound, 0.75) fast_sound = speed_change(sound, 2.0) 的不同值之间存在混淆。此外,sslCmd功能分配也是多余的。

以下是工作代码示例:

sslCmd

请注意,defmodule ParamStruct do defstruct default: nil, description: nil, key: nil, label: nil, order: nil, required: false, value: nil end structList = [ %ParamStruct{default: "Greater London", description: "Region", key: "ca_cert_subj_state", label: "State/County", order: 99, required: false, value: "Greater London"}, %ParamStruct{key: "ca_cert_subj_country", value: "United Kingdom"} ] sslCmd = """ openssl req -x509 -new -nodes -sha256 \ -key {{key-file-pass}}.key \ -days 3650 \ -out {{key-file-pass}}.pem \ -subj ""\ /C={{ca_cert_subj_country}}\ /ST={{ca_cert_subj_state}}\ /L={{ca_cert_subj_location}}\ /O={{ca_cert_subj_organization}}\ /OU={{ca_cert_subj_org_unit}}\ /CN={{ca_cert_subj_common_name}}\ /emailAddress={{ca_cert_email}}\ """ sslCmd = Enum.reduce(structList, sslCmd, fn(x, acc) -> String.replace(acc, "{{#{x.key}}}", x.value) end) 会重新分配给sslCmd的结果。

相关问题