我想禁止解析a.b
。我想从另一个配置中替换param
。像这样:
val d = ConfigFactory.load(ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin))
val a = ConfigFactory.parseString("param = 1")
val result = a.withFallback(d).resolve()
在这种情况下,param
获取值1,但a.b
仍为x
我在加载配置ConfigResolveOptions.defaults().setAllowUnresolved(true)
时尝试设置d
,但这不起作用。
我怎样才能克服这个?
答案 0 :(得分:3)
我在同样的事情上有点挣扎:尝试使用“后备”来覆盖值,当它被设计用于分层/合并配置时
假设我理解您的用例,我建议改为使用文件包含。
在我的application.conf
我有默认值
a.b = "placeholder"
在底部我有以下内容
# Local overrides - for development use
include "local.conf"
最后在local.conf
param = 1
a.b = ${param}
最终结果是a.b
将被1
答案 1 :(得分:3)
问题是Config.load
正在立即解决替换问题。如果你把它拿出来就像你想要的那样解决:
val p = ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin)
val a = ConfigFactory.parseString("param = 1")
val result = a.withFallback(p).resolve()
println(result.getString("a.b"))
打印1。
除非您想使用Config.load
等,否则不需要使用reference.conf
。如果您确实想使用Config.load
,那么您应该在撰写完成后再使用withFallback
使用 val p = ConfigFactory.parseString(
"""
|param = x
|a.b = ${param}
""".stripMargin)
val d = ConfigFactory.load(p)
val a = ConfigFactory.parseString("param = 1")
val result = a.withFallback(p)
val loaded = ConfigFactory.load(result)
println(loaded.getString("a.b"))
将所有配置放在一起。
例如,这也打印1:
application.conf
或者,假设您include
ConfigFactory.load()
与application.conf
一起使用include "foo"
(根据您的评论)。
如果foo.conf
看起来像
a.b = ${param}
和 val a = ConfigFactory.parseString("param = 1")
val app = ConfigFactory.load("application", ConfigParseOptions.defaults,
ConfigResolveOptions.defaults.setAllowUnresolved(true))
val result = a.withFallback(app).resolve
println(result.getString("a.b"))
看起来像
A.withFallback(B).withFallback(C)
然后打印1:
import csv
a=[['Lindsey Jessica <xyz@icloud.com>'],
['Jonathan Bob <a@xyz.edu>'],
['Homer Simpson <b@xyz.edu>']]
mylist=[elem[0].split() for elem in a ]
"""Output[['Lindsey', 'Jessica', '<xyz@icloud.com>'], ['Jonathan', 'Bob', '<a@xyz.edu>'], ['Homer', 'Simpson', '<b@xyz.edu>']]"""
mylist1=[]
#removing '<' and'>' and creating a new list name mylist1
for elem in mylist:
elem[2] = elem[2][1:len(elem[2])-1]
mylist1.append(elem)
#writing to a csv file
with open('out.csv', 'wb') as fp:
myf = csv.writer(fp, delimiter=',')
myf.writerows(mylist1)
通常,如果您希望A覆盖B以覆盖C,那么您应该使用function sum($array, $key){
isset($array[$key['stock_id']]) ? $array[$key[$array['select']]][$array['sum']] += $key[$array['sum']] : $array[$key[$array['select']]] = $key;
return $array;
};
//merge same stock_id and sum the quantity same stock id
$sum_same_stock_id = array_reduce($test, "sum", array('select'=>'stock_id', 'sum' => 'quantity'));
。
答案 2 :(得分:0)
为我的问题找到了解决方法:
所以如果我有配置文件application.conf
,它使用include
来包含包含替换语法的配置文件和包含将要替换的配置值声明的文件。
val a = ConfigFactory.parseString(s"""param = 1""")
val z = ConfigFactory.parseResources("application.conf") //this doesn't resolve substitutions
val result = a.withFallback(z).resolve().withFallback(ConfigFactory.load("application.conf"))