在TypeScript中,我想比较两个包含枚举值的变量.这是我的最小代码示例:
enum E {
A,
B
}
let e1: E = E.A
let e2: E = E.B
if (e1 === e2) {
console.log("equal")
}
Run Code Online (Sandbox Code Playgroud)
使用tsc(v 2.0.3)进行编译时出现以下错误:
TS2365:运算符'==='不能应用于类型'EA'和'E.B'.
同样的,==,!==和!=.我尝试添加const关键字,但似乎没有效果.该打字稿规范说以下内容:
4.19.3 <,>,<=,> =,==,!=,===和!==运算符
这些运算符要求一个或两个操作数类型可以分配给另一个.结果始终是布尔基元类型.
哪(我认为)解释了错误.但是我怎么能绕过它呢?
旁注
我正在使用带有atom-typescript的Atom编辑器,我的编辑器中没有任何错误/警告.但是当我tsc在同一目录中运行时,我得到了上面的错误.我以为他们应该使用相同的tsconfig.json文件,但显然情况并非如此.
使用XSLT 1.0,我试图基本上创建一个小节点集,然后将其作为参数传递给模板,如下所示:
<xsl:call-template name="widget">
<xsl:with-param name="flags">
<items>
<item>widget.recent-posts.trim-length=100</item>
<item>widget.recent-posts.how-many=3</item>
<item>widget.recent-posts.show-excerpt</item>
</items>
</xsl:with-param>
</xsl:call-template>
Run Code Online (Sandbox Code Playgroud)
我的想法是,从widget模板中我可以写出类似的东西:
<xsl:value-of select="$flags/item[1]" />
Run Code Online (Sandbox Code Playgroud)
显然我得到编译错误..我怎么能实现这种事情?
我喜欢写Markdown,经常发现自己需要桌子.有没有什么好的方法可以在Emacs 中编辑Markdown的管道表?我指的是这种语法:
| Header | Header | Right |
|--------|--------|------:|
| Cell | Cell | $10 |
| Cell | Cell | $20 |
Run Code Online (Sandbox Code Playgroud)
我首先尝试了Emacs的表模式,这很好,但是设计用于Markdown不支持的"网格表"(让我们说在Github的Markdown中).
还有org-mode的表格模式,可以用作次要模式.这非常接近; 但交叉点现在被+字符替换,并且不支持对齐冒号.所以org-tblmode首先给我这样的东西:
| Header | Header | Right |
|--------+--------+-------|
| Cell | Cell | $10 |
| Cell | Cell | $20 |
Run Code Online (Sandbox Code Playgroud)
然后我需要手动编辑到以下内容(编辑交集字符并添加对齐冒号):
| Header | Header | Right |
|--------|--------|------:|
| Cell | Cell | $10 |
| Cell | Cell | …Run Code Online (Sandbox Code Playgroud) 我正在使用MongoDB创建我的第一个应用程序.为字段创建索引,并尝试使用$ regex param在shell中启动查找查询
> db.foo.find({A:{$regex:'BLABLA!25500[0-9]'}}).explain()
{
"cursor" : "BtreeCursor A_1 multi",
"nscanned" : 500001,
"nscannedObjects" : 10,
"n" : 10,
"millis" : 956,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"A" : [
[
"",
{
}
],
[
/BLABLA!25500[0-9]/,
/BLABLA!25500[0-9]/
]
]
}
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为当我启动相同的查询,但收集中没有索引时,性能要好得多.
> db.foo.find({A:{$regex:'BLABLA!25500[0-9]'}}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 500002,
"nscannedObjects" : 500002,
"n" : 10,
"millis" : 531,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MongoDB来实现自然语言字典.我有一个lexemes集合,每个lexemes都有许多wordforms作为子文档.这就是一个单一的lexeme看起来像:
{
"_id" : ObjectId("51ecff7ee36f2317c9000000"),
"pos" : "N",
"lemma" : "skrun",
"gloss" : "screw",
"wordforms" : [
{
"number" : "sg",
"surface_form" : "skrun",
"phonetic" : "?skru?n",
"gender" : "m"
},
{
"number" : "pl",
"surface_form" : "skrejjen",
"phonetic" : "'skr?jj?n",
"pattern" : "CCCVCCVC"
}
],
"source" : "Mayer2013"
}
Run Code Online (Sandbox Code Playgroud)
目前我有大约4000个lexemes的集合,每个lexemes平均有一个1000个字形的列表(而不是上面的2个).这意味着我在集合中有效地拥有4,000,000个独特的单词形式,我需要能够在合理的时间内搜索它们.
普通查询看起来像这样:
db.lexemes.find({"wordforms.surface_form":"skrejjen"})
Run Code Online (Sandbox Code Playgroud)
我有一个索引wordforms.surface_form,这个搜索非常快.但是,如果我想在搜索中使用通配符,则性能非常差.例如:
db.lexemes.find({"wordforms.surface_form":/skrej/})
Run Code Online (Sandbox Code Playgroud)
花了5分多钟(此时我放弃了等待).正如在这个问题中提到的,对索引进行正则表达式搜索是不好的.我知道在正则表达式搜索中添加^锚点有很大帮助,但它也严重限制了我的搜索功能.即使我愿意做出这样的牺牲,我也注意到响应时间仍然可以根据正则表达式而变化很大.查询
db.lexemes.find({"wordforms.surface_form":/^s/})
Run Code Online (Sandbox Code Playgroud)
需要35秒才能完成.
到目前为止,我所获得的最佳结果实际上是在我关闭索引时使用的hint.在这种情况下,事情似乎有了很大改善.这个查询:
db.lexemes.find({"wordforms.surface_form":/skrej/}).hint('_id_')
Run Code Online (Sandbox Code Playgroud)
需要大约3秒才能完成.
我的问题是,我还能做些什么来改善这些搜索时间吗?虽然它们仍然有点慢,但我已经在考虑迁移到MySQL以期获得性能.但我真的希望保持Mongo的灵活性并避免RDBMS中所有繁琐的规范化.有什么建议?您是否认为无论使用数据库引擎,我都会遇到一些缓慢的问题?
我知道Mongo的新文本搜索功能,但这个(标记化和词干化)的优点与我的情况无关(更不用说我的语言不受支持).目前尚不清楚文本搜索实际上是否比使用正则表达式更快.
我正在开发一个ExpressJS应用程序.我用pm2加载它:
myapp$ pm2 start bin/www
Run Code Online (Sandbox Code Playgroud)
这很好,除了添加--watch标志似乎不起作用; 每次我更改JS源代码时,我都需要显式重新启动它才能使更改生效:
myapp$ pm2 restart www
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我已尝试--watch使用非ExpressJS应用程序的标志,它按预期工作.
我正在使用Xtext 2编写一个Eclipse插件.我通过编写自己的RootPreferencePage类来提供自己的首选项:
package org.grammaticalframework.eclipse.ui.editor.preferences;
import org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage;
public class GFLanguageRootPreferencePage extends LanguageRootPreferencePage {
@Override
protected void createFieldEditors() {
addField(new StringFieldEditor("PREF", "&Label:", getFieldEditorParent()));
}
@Override
public void init(IWorkbench workbench) {
getPreferenceStore().setDefault("PREF", "default-value");
}
}
Run Code Online (Sandbox Code Playgroud)
并像往常一样将其绑定在UI模块中:
public Class<? extends org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage> bindLanguageRootPreferencePage() {
return org.grammaticalframework.eclipse.ui.editor.preferences.GFLanguageRootPreferencePage.class;
}
Run Code Online (Sandbox Code Playgroud)
这很好用; 我可以保存首选项,关闭并重新打开Eclipse,再次转到首选项窗口并查看我保存的值.但问题是当我尝试以编程方式检索首选项值时.我使用以下代码:
IPreferencesService prefs = Platform.getPreferencesService();
String s = prefs.getString(QUALIFIER, "PREV", "fallback", null);
Run Code Online (Sandbox Code Playgroud)
这种方法在保留在Eclipse的同一个实例中时工作正常,但在重新启动Eclipse后,我尝试以编程方式检索首选项失败.有趣的是我知道通过检查首选项窗口正确保存了我的首选项.
我想这是这里和这里描述的偏好范围的一个问题,但我无法弄清楚我在偏好值的程序化检索中做错了什么.
UPDATE
我已经注意到,当我setDefault(...)从init()方法中删除调用时,事情完全正常.也就是说,我可以通过UI设置首选项,重新加载Eclipse,并以编程方式检索这些值而不会出现问题.
所以问题现在变成了我需要为我的呼叫找到正确的位置setDefault(...).基于同一篇文章,我扩展了``扩展点如下:
<extension point="org.eclipse.core.runtime.preferences">
<initializer
class="org.grammaticalframework.eclipse.ui.editor.preferences.GFPreferenceInitializer"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试在OSX上的GNU Emacs 24中使用redo + .el.当我尝试加载文件(使用M-x load-file,或(require 'redo+)在我的.emacs文件中)时,我收到此错误:
Attempt to modify read-only object
Run Code Online (Sandbox Code Playgroud)
调试器的完整输出如下(此处也是Gist ).
Debugger entered--Lisp error: (error "Attempt to modify read-only object")
setcar(((and (not buffer-read-only) (not (eq t buffer-undo-list)) (if (eq last-command (quote undo)) (listp pending-undo-list) (consp buffer-undo-list))) :help "Undo last operation") (and (not buffer-read-only) (consp buffer-undo-list) (or (not (or (eq last-buffer-undo-list buffer-undo-list) (eq last-buffer-undo-list (cdr buffer-undo-list)))) (listp pending-undo-list))))
(lambda (map) (setcar (cdr (memq :enable (assq (quote undo) (cdr …Run Code Online (Sandbox Code Playgroud) 我正在使用 org-mode 编写一份报告,然后将其导出到 LaTeX。我有几个不同的.org文件(每章一个),我将它们导出为“无头”LaTeX,然后合并到一个主.tex文件中。这很好用,除了生成的.tex文件包含带有冲突数字的标签。因此,无论a.tex和b.tex包含\label{sec-1},例如。
只要我从来没有真正使用过这些引用,那么我认为这不是什么大问题,尽管这些警告确实让我很恼火。有没有办法关闭这些标签的生成?它应该很简单,但我在文档中找不到任何关于此的信息。
我正在编写一个带有向导(org.eclipse.jface.wizard.Wizard)的Eclipse插件,该向导创建一个带有基本代码模板的新文件.为了简化文件内容的"拼凑",我计划将所有内容填充到一个长字符串中,将其插入到文件中,然后调用我的自定义Formatter(继承org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter)来清理所有缩进等等.
问题是,如何以编程方式调用格式化程序?在向导中,我调用IDE.openEditor()并获取一个句柄IEditorPart.我能从这里做什么?
我需要一些帮助来理解一些 GHC 堆配置文件。我正在为语法框架语言的现有编译器开发一种新的输出格式。
分析当前版本编译器的正常运行如下所示:
13,347,660,488 bytes allocated in the heap
213,062,924,208 bytes copied during GC
740,585,528 bytes maximum residency (567 sample(s))
4,844,112 bytes maximum slop
1438 MiB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 12312 colls, 0 par 1.321s 1.382s 0.0001s 0.0025s
Gen 1 567 colls, 0 par 206.442s 208.534s 0.3678s 0.8388s
INIT time 0.001s ( 0.005s elapsed)
MUT time 68.757s ( 68.986s elapsed)
GC …Run Code Online (Sandbox Code Playgroud) 这一点必须是显而易见的,但我已经搜索了很多年,并且在任何地方都找不到它.我正在创建一个SWT TableViewer,我希望在我的单元格周围有边框.我该怎么做呢?无论我尝试什么,我的细胞总是无边界的,很难分辨出一个细胞的结束和另一个细胞的开始.我的代码:
TableViewer outputViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
outputViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
TableViewerColumn col = new TableViewerColumn(outputViewer, SWT.LEFT | SWT.BORDER);
col.getColumn().setWidth(200);
col.getColumn().setText("Output");
col.getColumn().setResizable(true);
col.setLabelProvider(new ColumnLabelProvider());
Run Code Online (Sandbox Code Playgroud)