如此问题所示:
如何使列唯一并在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) Spirit X3如此“无状态”的目的是什么?
回顾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)