我需要在bundle的语义配置中定义一个具有给定默认值的数组节点.目前看起来像:
$node->arrayNode('foo')
->prototype('scalar')->end()
->defaultValue(array('1', '2', '3'))
->end();
Run Code Online (Sandbox Code Playgroud)
我想给用户提供覆盖此数组的选项,null如:
my_bundle:
foo: ~
Run Code Online (Sandbox Code Playgroud)
我不能使用空数组([]或array())而不是null给定[]应该具有不同语义的数组null.
这是可能的还是有任何非丑陋的解决方法?目前我只是得到一个例外:
InvalidTypeException:路径"my_bundle.foo"的类型无效.预期的数组,但得到NULL
作为一个Redux初学者,考虑到(一个更大的应用程序)的想法,我想象一个类似于以下的根减速器:
const rootReducer = combineReducers({ accounting, crm, sales })
Run Code Online (Sandbox Code Playgroud)
在这种情况下,应用程序状态将包含accounting,crm和sales,即使用户仅使用应用程序的一部分.这可能是有利的,例如在会计和CRM之间来回切换时作为缓存,但您可能不希望保留所有已打开的视图的所有数据,即没有任何修剪的完整可能的状态树,在应用程序中永远或甚至在加载时将整个树初始化为其初始状态.
是否有解决这个问题的习语,模式或图书馆,或者我遗失了什么?
作为解决保留所有数据的部分解决方案,我想象一些事情,比如在导航离开应用程序的某些部分时将状态的一部分重置为其初始状态,给出一些声明性规则,例如:
accounting = {}(间接地,通过诸如的动作ACCOUNTING_LEAVING)<Accounting/>componentWillUnmountcrm.mail = {}时删除/设置<MailEditor/>componentWillUnmount我没有看到以任何方式清理国家的例子.许多"list + detail view"示例存储状态{ list: [...], detail: {...} },但是当切换到详细视图时,列表既不清空也不清空或删除.我很快就会回到列表视图,但是在没有释放数据的情况下使用应用程序9到5时就不行了.
给定以下C函数:
void go(char *data) {
char name[64];
strcpy(name, data);
}
Run Code Online (Sandbox Code Playgroud)
x86-64上的GCC 5和6编译(简单gcc -c -g -o后跟objdump)到:
0000000000000000 <go>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 83 ec 50 sub $0x50,%rsp
8: 48 89 7d b8 mov %rdi,-0x48(%rbp)
c: 48 8b 55 b8 mov -0x48(%rbp),%rdx
10: 48 8d 45 c0 lea -0x40(%rbp),%rax
14: 48 89 d6 mov %rdx,%rsi
17: 48 89 c7 mov %rax,%rdi
1a: e8 00 00 00 00 callq 1f <go+0x1f> …Run Code Online (Sandbox Code Playgroud) 我目前正在动态构建这样的查询:
QueryOver<Base, Base> q = QueryOver.Of<Base>();
if (foo != null) q = q.Where(b => b.Foo == foo);
// ...
Run Code Online (Sandbox Code Playgroud)
现在有多个Base(例如Derived)我想要过滤的映射子类,基本上类似于:
if (bar) q = q.Where(b => b is Derived); // does not work
Run Code Online (Sandbox Code Playgroud)
要么:
if (bar) q = q.Where(b => b.DiscriminatorColumn == 'derived'); // dito
Run Code Online (Sandbox Code Playgroud)
我如何以类型安全的方式最好地 - 但不是必须 - 实现这一目标?这可以用LINQ完成吗?