Perlでは、次のようなことができます。
my $home = "/home";
my $alice = "$home/alice";
YAMLで次のようなことを行うことはできますか?
Home: /home
Alice: $Home/alice
したがって、「アリス」は事実上/home/alice
最終的には?
残念ながら、あなたは運が悪いです。やりたいことを行うには、ビューファイル(またはどこでも)から$home
を渡して、yamlエントリに補間する必要があります。これは次のようになります。
Alice: ! '%{home}/Alice'
ほぼ正確にあなたの質問に対する詳細な答えについては、 このStackOverflow Q&A を参照してください。
ERBテンプレートを使用する必要があります。
次のように書くことができます:
Alice: <%=home%>/alice
使用する場合は、YAMLとして解析する前にERBでhome
値を解析する必要があります。 homeがローカル変数の場合、ローカルバインディングを#resultメソッドの引数として渡す必要があります。これを渡さない場合、デフォルトとしてTOPLEVELバインディングが使用されます。
このような:
require 'erb'
home = 'home'
YAML.load(ERB.new(yaml_content).result(binding))
最近、これをPythonで探していて、GithubのAwesomeYAMLリポジトリからdynamic-yaml
パッケージに出くわしました。
Link Awesome YAML Github Repo: https://github.com/dreftymac/awesome-yaml#parsers Python用の動的YAMLのリンク: https://github.com/childsish/dynamic- yaml
お役に立てれば!
編集:コメントは正しく、リンクが壊れている可能性があるため、簡単な例を次に示します。
次のようなYAMLファイルがある場合:
house:
street: cool_street_name
number: 45
street_and_number: {house.street}-{house.number}
python -m pip install dynamic_yaml
を指定してdynamic_yamlをインストールし、次のスクリプトを実行します。
import dynamic_yaml
with open(path_to_yaml_file, 'r') as f:
data = dynamic_yaml.load(f)
次に、次のようになります。
print(data['house']['street_and_number'])
>> cool_street_name-45
最終的に YAML::AppConfig
を使用しましたが、確かにそれはYAMLソリューションではなく、Perl固有のソリューションです。これにより、YAMLに補間される$var
sを含めることができます。
Ygl を使用すると、次のように例を記述できます。
Home: /home
Alice: !? .Home + '/alice'
または
Home: /home
Alice: !? ('{0}/alice').format($_.Home)
免責事項:私はYgluの作者です。