如果你从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
静态方法?
我实现了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) quickfix缓冲区(:cope
在:make
例如之后打开)包含在:bnext
:bprevious
我经常使用的导航中(已将其映射到箭头键).我从来不想以这种方式导航到quickfix缓冲区.有没有一种好方法可以排除它?
我正在尝试将这个关键的“去抖动”逻辑从 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) 我似乎经常将关键字直接映射到数据类型,我解决它如下所示.由于必须重复字符串值,因此很快就会失控.
是否有更紧凑的表达方式?
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) 是否有一个好的命令可以切换到进行编辑的最后一个缓冲区(和位置)?我宁愿不必为此安装插件(但如果没有其他方法,那么我会这样做)。
这不是由 BufSurf 插件解决的,它实际上可以追溯到导航历史,这是对听起来相似的问题的答案。
haskell ×2
vim ×2
domparser ×1
ieee-754 ×1
javascript ×1
parsec ×1
python ×1
python-3.x ×1
quickcheck ×1
svg ×1
vim-plugin ×1