断开琴弦的最佳方法
"@=service('AnotherService1').create(service('AnotherService2'), service('AnotherService3'), service('AnotherService3'))"
是通过使用剥离折叠块标量 http://www.yaml.org/spec/1.2/spec.html#id2796251。这样做的限制是您不能用反斜杠转义任何特殊字符,但这些字符不在您的示例中(您需要的原因""
围绕你的标量是因为它以@
这是保留字符)。
然后你还必须正确地重新表示你所拥有的结构,正如 @flyx 已经指出的那样:calls
是一个序列,其第一个元素是标量列表add
以及由上述长标量组成的序列,您希望将其分解以提高可读性:
import yaml
yaml_str = """\
MyService:
class: Some\Class\Here
factory:
- SomeFactoryHere
- method
calls:
- - add
- - >-
@=service('AnotherService1').create(
service('AnotherService2'),
service('AnotherService3'),
service('AnotherService3'))
"""
data = yaml.safe_load(yaml_str)
print(data)
gives:
"@=service('AnotherService1').create( service('AnotherService2'), service('AnotherService3'), service('AnotherService3'))"
请注意,这会在之间留出额外的空间.create(
and service(
.
Symphony 使用的 YAML 解析器似乎无法解析上述内容(尽管它是正确的)。您也可以尝试:
MyService:
class: Some\Class\Here
factory:
- SomeFactoryHere
- method
calls:
-
- add
-
- >-
@=service('AnotherService1').create(
service('AnotherService2'),
service('AnotherService3'),
service('AnotherService3'))