上下文:对于JavaScript项目的开发版本,我编写了一个小实用程序来跟踪脚本文件依赖性(因为我不喜欢任何现有库的欢闹语法要求).我希望以类似于其他语言的方式使其工作,所以我决定解析导入的文件以获得如下评论:
// DEPENDS: myurl.js //
Run Code Online (Sandbox Code Playgroud)
使用jQuery的$ .ajax()构建和评估依赖关系图并获取依赖关系.这适用于顶级文件.但是,使用ajax调用删除的文件会被删除注释,因此我无法进一步解析依赖项.
为了您的兴趣:周期是
问题:有没有办法阻止jQuery从$ .ajax()加载的文件中删除JavaScript注释标记?
代码:我用这种方式调用ajax
$.ajax({
url: fileName,
dataType: 'text',
context: this,
success: function(jqXHR) {
this.parseImport(fileName, jqXHR);
}
});
Run Code Online (Sandbox Code Playgroud)
(从提供fileName的方法内部来看,这是正确的).我希望dataType:'text'会强制jQuery从字面上导入文本,但是,它没有:-D
$ .ajax()的API文档告诉我,dataType:text元素的内容是用window.String解析的,但我不确定,window.String对它的输入做了什么.也许解决方案在这部分的某个地方?
如果有人能指出我正确的方向,我会很高兴的.
我正在处理60GB或更大的文本文件.这些文件分成可变长度的标题部分和数据部分.我有三个功能:
head? 用于区分标题行和数据行的谓词process-header 处理一个标题行字符串process-data 处理一个数据行字符串我从另一个SO线程推进了文件读取方法,它应该构建一个懒惰的行序列.想法是用一个函数处理一些行,然后切换一次函数并继续处理下一个函数.
(defn lazy-file
[file-name]
(letfn [(helper [rdr]
(lazy-seq
(if-let [line (.readLine rdr)]
(cons line (helper rdr))
(do (.close rdr) nil))))]
(try
(helper (clojure.java.io/reader file-name))
(catch Exception e
(println "Exception while trying to open file" file-name)))))
Run Code Online (Sandbox Code Playgroud)
我喜欢用它
(let [lfile (lazy-file "my-file.txt")]
(doseq [line lfile :while head?]
(process-header line))
(doseq [line (drop-while head? lfile)]
(process-data line)))
Run Code Online (Sandbox Code Playgroud)
虽然这样可行,但由于以下几个原因,效率相当低:
process-head直到我到达数据然后继续process-data,我必须过滤标题行并处理它们,然后重新解析整个文件并删除所有标题行以处理数据.这与lazy-file打算做的完全相反.那么使用我的数据库的更有效,惯用的方法是什么?
一个想法可能是使用多方法来处理依赖于head?谓词值的标题和数据,但我认为这会产生一些严重的速度影响,特别是因为只有一个出现,其中谓词结果从始终变为真总变为假.我还没有基准测试.
用另一种方法构建line-seq并用它解析它会更好iterate吗?这仍然需要我使用:while和:drop-while,我猜.
在我的研究中,曾多次提到使用NIO文件访问,这应该可以提高内存使用率.我还没知道如何在clojure中以惯用的方式使用它.
也许我仍然很难掌握一般的想法,如何处理文件? …
我正在尝试使用特定的 JavaScript 框架,该框架需要扩展基类以将其用于应用程序。
基本上我想按照惯用的 ClojureScript 执行以下操作。
class Foo extends Bar {
constructor() { super("data") }
method1(args) { /* do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)
我试过
(defn foo
[]
(reify
js/Bar
(constructor [this] (super this "data"))
(method1 [this args] )))
Run Code Online (Sandbox Code Playgroud)
如果我从 Object 创建一个新类,这会起作用,但正如shadow-cljs正确抱怨的那样,“Symbol js/Bar 不是协议”。另外,我不想添加方法,而是创建一个继承某些方法并重载其他方法的子类。
我想过使用proxy,但“未定义核心/代理”。
当然,我可以创建的实例Bar和set!新方法,但感觉就像放弃和使用质量较低的语言。