'by'关键字在Kotlin中做了什么?在为android开发时,我有时会遇到类似这样的东西:
var someModel: someViewModel by notNullAndObservable { vm ->
...
}
Run Code Online (Sandbox Code Playgroud)
我不明白'by'关键字的重要性是什么.
我有一个包含大量文件夹,子文件夹和所有文件的目录.我的项目的想法是递归整个目录,收集文件的所有名称并替换无效字符(对于SharePoint迁移无效).
但是,我对正则表达式完全不熟悉.我需要在文件名中摆脱的字符是: ~, #, %, &, *, { } , \, /, :, <>, ?, -, |
和""
我想用一个空格来代替这些字符.我希望使用一种string.replace()
方法来查看所有这些文件名并进行替换.
到目前为止,我得到的唯一代码是递归.我正在考虑递归扫描驱动器,获取这些文件的名称并将它们放入List<string>
.
任何人都可以帮助我如何使用RegEx查找/替换无效字符与这些特定字符?
我仍在努力使用Doctrine QueryBuilder,因为当我想在select表达式中添加另一个元素时,我认为它无法正常工作.
在这两种情况下,doctrine $ queryBuilder-> getQuery() - > getResults()返回一个数组,其中实体表示为字符串而不是对象:
情况1:
$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder->select("e, 99 as number");
Run Code Online (Sandbox Code Playgroud)
它返回
array(4) {
[0]=>
array(2) {
[0]=> string(30) "Profile_Entity" //notice this is a string but it should be an object instance
["number"]=> string(2) "99"
}
...
...
Run Code Online (Sandbox Code Playgroud)
如果我会写
$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder->select("e");
$queryBuilder->select("99 as number");
Run Code Online (Sandbox Code Playgroud)
它将返回与情况1相同的东西
下面是它通常应该是什么(这里只是select表达式中的一个元素)
array(4) {
[0]=> object(stdClass)#935 (39) {
["__CLASS__"]=> string(30) "Profile_Entity"
["id"]=> int(46)
["headline"]=> string(7) "asdasd
...
...
...
Run Code Online (Sandbox Code Playgroud) 当我在 Doctrine 中执行这样的事情时:
$qb = $doctrine
->getRepository('EntityA')
->createQueryBuilder('a')
->addSelect('b')
->join('EntityB', 'b', 'WITH', 'a.b = b')
->getQuery()
->getResult()
Run Code Online (Sandbox Code Playgroud)
我得到一个看起来像这样的数组:
array(0 => EntityA,
1 => EntityB,
2 => EntityA,
4 => EntityB)
Run Code Online (Sandbox Code Playgroud)
事实上,我得到了 2 个结果行,但是一个大小为 4 的数组。这使得迭代它以在模板中显示几乎是不可能的。
我想要这样的结果:
array(0 => array(EntityA, EntityB),
1 => array(EntityA, EntityB))
Run Code Online (Sandbox Code Playgroud)
当然,我可以在EntityA
该引用上创建映射EntityB
。但即使有改变的装载行为的可能性LAZY
,EAGER
等等,也可能是希望具有动态创建这种关系的可能性。
例如:
在包含大量实体的概览中,EAGER
需要加载以防止过多的查询。但是当我只想显示一个实体并且不需要额外的数据时,延迟加载更可取。