小编sak*_*ki7的帖子

如何在Rails中正确指定多列索引

如此问题所示: 如何使列唯一并在Ruby on Rails迁移中将其编入索引?
你可以写:

add_index :the_table, [:foo_column, :bar_column], unique: true
Run Code Online (Sandbox Code Playgroud)

添加多列索引.
但是,是否仍需要为已经指定多列索引的每个列添加单个索引?

我的意思是上面显示的代码之外写下面的代码.

add_index :the_table, :foo_column  
add_index :the_table, :bar_column
Run Code Online (Sandbox Code Playgroud)

mysql postgresql indexing ruby-on-rails

7
推荐指数
2
解决办法
4548
查看次数

Spirit V2和X3的状态

Spirit X3如此“无状态”的目的是什么?

Spirit V2中“状态”的不良方面

回顾Spirit V2,“语法”在许多方面在概念上都是有状态的。这是因为语法是类实例。

基本上,使语法(甚至任何一条规则)变得有状态有很多不良方面:

  • 它可能会使您的语法不可重入;
  • 它可能会给您的语法实例增加线程安全性;
  • 自我管理的“标志”是一场灾难。

从理论上讲,添加外部状态会使您的语法变得不平凡。

真的不需要状态吗?

相反,您可以说任何解析器都是有状态的(因为它解析当前上下文并且上下文是状态)。下面是程序员添加其他“上下文”的一个好例子:

quoted_string_ = as_string [omit [char_("'\"") [_a = _1]] >> *(char_ - lit(_a)) >> lit(_a)]
Run Code Online (Sandbox Code Playgroud)

qi::locals是非外部国家的好兆头。

程序员可以在语法中添加一些“外部状态”,并且在大多数情况下,它们只是在做错误的事情:

func_call_ = func_name_ >> lit('(') >> eps [ref(is_inside_function_call) = true] >> ...
Run Code Online (Sandbox Code Playgroud)

但是,在某些极端情况下,外部状态很有用。

macro_type_1_ =
    lit("{{{") [PUSH_STATE(macro_ctx, Macro::Type1)] >> (
        ((any_expr_ - end_of_macro_ctx_) >> lit("}}}") >> eps [POP_STATE(macro_ctx)]) |
        (eps [POP_STATE(macro_ctx)] >> eps [_pass = false])
    )
;
macro_type_2_ =
    lit("[[[") [PUSH_STATE(macro_ctx, Macro::Type2)] >> (
        ((any_expr_ - end_of_macro_ctx_) >> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-spirit-qi boost-spirit-x3

0
推荐指数
1
解决办法
477
查看次数