2017-04-16 6 views
1

以下のコードでは、structListは各keyがテンプレート内の文字列で、valueが置換文字である構造体のリストです。このEnum.reduceとString.replaceの組み合わせの正しい式は何ですか?

key上記いずれかでそう
%ParamStruct{default: "Greater London", description: "Region", 
key: "ca_cert_subj_state", label: "State/County", order: 99, required: false, 
value: "Greater London"} 

ca_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

両方ともsslCmdという2つの異なる値の間に混乱があると思います。また、機能内のsslCmd割り当ては冗長です。 sslCmdEnum.reduce/3の結果に再割り当てされていることを

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) 

注:ここ

、作業のコード例です。

関連する問題