小编kas*_*bah的帖子

创建新的DOMParser实例有什么意义?

如果你从MDN看一下DOMParser的例子:

var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// returns a Document, but not a SVGDocument nor a HTMLDocument

parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// returns a SVGDocument, which also is a Document.

parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html");
// returns a HTMLDocument, which also is a Document.
Run Code Online (Sandbox Code Playgroud)

他们不断创建new DOMParser实例.但为什么?一个解析器实例不足够吗?那些进行大量解析的代码,在创建新实例方面是否具有性能优势?

编辑:人们正在挂起这个例子.更好地说出我的问题:为什么不DOMParser更喜欢JSON和它的parse方法?为什么不是 parseFromString静态方法?

javascript domparser

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

为什么我的SVG弧转换实现不能通过QuickCheck?

我实现了W3s推荐的算法,用于将SVG路径弧从端点弧转换为中心弧并返回 Haskell.

type EndpointArc = ( Double, Double, Double, Double
                   , Bool, Bool, Double, Double, Double )

type CenterArc = ( Double, Double, Double, Double
                 , Double, Double, Double )

endpointToCenter :: EndpointArc -> CenterArc

centerToEndpoint :: CenterArc -> EndpointArc
Run Code Online (Sandbox Code Playgroud)

请在此处查看完整实施和测试代码.

但我无法通过这个属性:

import Test.QuickCheck
import Data.AEq ((~==))

instance Arbitrary EndpointArc where
    arbitrary = do
        ((x1,y1),(x2,y2)) <- arbitrary `suchThat` (\(u,v) -> u /= v)
        rx                <- arbitrary `suchThat` (>0)
        ry                <- arbitrary `suchThat` (>0)
        phi               <- choose (0,2*pi)
        (fA,fS) …
Run Code Online (Sandbox Code Playgroud)

svg haskell ieee-754 quickcheck

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

从`:bnext``:bprevious`中排除quickfix缓冲区

quickfix缓冲区(:cope:make例如之后打开)包含在:bnext :bprevious我经常使用的导航中(已将其映射到箭头键).我从来不想以这种方式导航到quickfix缓冲区.有没有一种好方法可以排除它?

vim

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

协程中的条件基于是否再次调用?

我正在尝试将这个关键的“去抖动”逻辑从 Javascript 翻译为 Python。

function handle_key(key) {
    if (this.state == null) {
        this.state = ''
    }
    this.state += key
    clearTimeout(this.timeout)
    this.timeout = setTimeout(() => {
        console.log(this.state)
    }, 500)
}

handle_key('a')
handle_key('b')
Run Code Online (Sandbox Code Playgroud)

这个想法是随后的按键会延长超时时间。Javascript 版本打印:

ab 
Run Code Online (Sandbox Code Playgroud)

我不想翻译 JS 超时函数,我宁愿使用惯用的 Python 使用 asyncio。我在 Python (3.5) 中的尝试如下,但它不起作用,因为它global_state实际上没有按我的预期更新。

import asyncio

global_state = ''

@asyncio.coroutine
def handle_key(key):
    global global_state
    global_state += key
    local_state = global_state
    yield from asyncio.sleep(0.5)
    #if another call hasn't modified global_state we print it
    if local_state == global_state:
        print(global_state)

@asyncio.coroutine
def …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-asyncio

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

使用Parsec将字符串映射到数据类型的简洁方法

我似乎经常将关键字直接映射到数据类型,我解决它如下所示.由于必须重复字符串值,因此很快就会失控.

是否有更紧凑的表达方式?

import Text.ParserCombinators.Parsec

data Keyword = Apple | Banana | Cantaloupe

parseKeyword :: Parser Keyword
parseKeyword = (  string "apple"
              <|> string "banana"
              <|> string "cantaloupe"
               ) >>= return . strToKeyword
                    where strToKeyword str = case str of
                           "apple"      -> Apple
                           "banana"     -> Banana
                           "cantaloupe" -> Cantaloupe
Run Code Online (Sandbox Code Playgroud)

编辑:

作为后续问题,因为这似乎太容易了.紧凑型解决方案如何工作try

例如

import Text.ParserCombinators.Parsec

data Keyword = Apple | Apricot | Banana | Cantaloupe

parseKeyword :: Parser Keyword
parseKeyword = (  try (string "apple")
              <|> string "apricot"
              <|> string …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

4
推荐指数
3
解决办法
210
查看次数

快速切换到上次编辑的缓冲区

是否有一个好的命令可以切换到进行编辑的最后一个缓冲区(和位置)?我宁愿不必为此安装插件(但如果没有其他方法,那么我会这样做)。

这不是由 BufSurf 插件解决的,它实际上可以追溯到导航历史,这是对听起来相似的问题的答案。

vim vim-plugin

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