小编Joh*_*eri的帖子

如何在TypeScript中比较枚举

在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文件,但显然情况并非如此.

enums compare equality typescript

46
推荐指数
7
解决办法
3万
查看次数

XSLT 1.0 - 创建节点集并作为参数传递

使用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)

显然我得到编译错误..我怎么能实现这种事情?

xslt xslt-1.0

26
推荐指数
2
解决办法
3万
查看次数

在Emacs中编辑Markdown管道表

我喜欢写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)

emacs markdown org-mode

24
推荐指数
4
解决办法
6265
查看次数

具有索引字段的MongoDB正则表达式

我正在使用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)

regex indexing mongodb mongodb-indexes

22
推荐指数
1
解决办法
9709
查看次数

加速MongoDB中的正则表达式字符串搜索

我正在尝试使用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的新文本搜索功能,但这个(标记化和词干化)的优点与我的情况无关(更不用说我的语言不受支持).目前尚不清楚文本搜索实际上是否比使用正则表达式更快.

regex indexing mongodb mongodb-query

11
推荐指数
2
解决办法
1万
查看次数

如何使用pm2观看和重新加载ExpressJS应用程序

我正在开发一个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应用程序的标志,它按预期工作.

node.js express pm2

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

在基于Xtext的Eclipse插件中正确初始化和检索首选项

我正在使用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)

eclipse eclipse-plugin preferences xtext

6
推荐指数
1
解决办法
1300
查看次数

GNU Emacs 24上的redo + .el

我正在尝试在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)

emacs

6
推荐指数
1
解决办法
1007
查看次数

组织模式导出到 Latex — 抑制标签的生成

我正在使用 org-mode 编写一份报告,然后将其导出到 LaTeX。我有几个不同的.org文件(每章一个),我将它们导出为“无头”LaTeX,然后合并到一个主.tex文件中。这很好用,除了生成的.tex文件包含带有冲突数字的标签。因此,无论a.texb.tex包含\label{sec-1},例如。

只要我从来没有真正使用过这些引用,那么我认为这不是什么大问题,尽管这些警告确实让我很恼火。有没有办法关闭这些标签的生成?它应该很简单,但我在文档中找不到任何关于此的信息。

emacs latex org-mode

5
推荐指数
1
解决办法
1133
查看次数

以编程方式从新文件向导触发Eclipse的代码格式化程序

我正在编写一个带有向导(org.eclipse.jface.wizard.Wizard)的Eclipse插件,该向导创建一个带有基本代码模板的新文件.为了简化文件内容的"拼凑",我计划将所有内容填充到一个长字符串中,将其插入到文件中,然后调用我的自定义Formatter(继承org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter)来清理所有缩进等等.

问题是,如何以编程方式调用格式化程序?在向导中,我调用IDE.openEditor()并获取一个句柄IEditorPart.我能从这里做什么?

formatting eclipse-plugin xtext

2
推荐指数
1
解决办法
1523
查看次数

解释 GHC 堆配置文件中的悬崖边缘

我需要一些帮助来理解一些 GHC 堆配置文件。我正在为语法框架语言的现有编译器开发一种新的输出格式。

分析当前版本编译器的正常运行如下所示:

PGF 的堆配置文件

  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)

profiling haskell ghc gf

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

在SWT TableViewer中启用单元格边框

这一点必须是显而易见的,但我已经搜索了很多年,并且在任何地方都找不到它.我正在创建一个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)

java eclipse swt jface tableviewer

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