我在Clojurescript命名空间键入以下内容.
cljs.user> (use '[clojure.zip :only [insert-child]])
WARNING: Use of undeclared Var cljs.user/use at line 1
"Error evaluating:" (use (quote [clojure.zip :only [insert-child]])) :as "cljs.user.use.call(null,cljs.core.vec([\"\\uFDD1'clojure.zip\",\"\\uFDD0'only\",cljs.core.vec([\"\\uFDD1'insert-child\"])]));\n"
#<TypeError: Cannot call method 'call' of undefined>
TypeError: Cannot call method 'call' of undefined
at eval (eval at <anonymous> (http://localhost:3000/main.js:32728:147), <anonymous>:1:85)
at eval (eval at <anonymous> (http://localhost:3000/main.js:32728:147), <anonymous>:6:3)
at http://localhost:3000/main.js:32728:142
at evaluate_javascript (http://localhost:3000/main.js:32741:4)
at Object.callback (http://localhost:3000/main.js:32806:138)
at goog.messaging.AbstractChannel.deliver (http://localhost:3000/main.js:31059:13)
at goog.net.xpc.CrossPageChannel.deliver_ (http://localhost:3000/main.js:32164:14)
at Function.goog.net.xpc.NativeMessagingTransport.messageReceived_ (http://localhost:3000/main.js:31732:13)
at goog.events.Listener.handleEvent (http://localhost:3000/main.js:22590:26)
at Object.goog.events.fireListener (http://localhost:3000/main.js:22924:21)
nil
Run Code Online (Sandbox Code Playgroud)
似乎在说明cljs.user命名空间中不存在'use'方法.这种方式对我来说很有意义,因为Clojurescript本身无法评估Clojure表达式.但是,我知道Clojurescript有一个clojure.zip命名空间,我在命名空间声明中使用了clojure.zip (:use [clojure.zip :only …
我有一些计算有点昂贵(启动数据库),我只想创建数据库,如果我真的要使用它.我正在寻找一个引用变量(或只是一个普通的变量,如果可能的话),它只会在它被使用(或解除引用)的情况下评估它的值.概念上像以下一样的东西.
(def v (lazy-var (fn [] (do (println "REALLY EXPENSIVE FUNCTION") true))))
Run Code Online (Sandbox Code Playgroud)
而且在将来,当我要么使用var v,或者调用@v时,我会打印出"真正昂贵的功能",并且从那里v的值为true.这里重要的是fn直到变量被引用(de)才被评估.在需要时,该函数仅被评估一次以计算变量的值.在clojure中这可能吗?
CTRL-x o - 将光标切换到其他窗口
我希望有能力扭转这种control-x o局面.像control-x p这样的东西确切地做了什么control-x o,但倒退.这个请求的原因是我经常打开两个代码,一个缓冲打开,这是一个repl.我经常不得不穿过其中一个缓冲区来到另一个缓冲区,这很烦人.
假设我打开了3个缓冲区(A,B,C),并且我在缓冲区B上.缓冲区按字母顺序排列control-x o.当我想去A时,我想按control-x p,而不是必须按control-x o两次.
感谢任何帮助,谢谢.
我们假设我有一个X.clojurescript和一个X.clojure命名空间.X.clojurescript中的所有内容都是Clojurescript代码,X.clojure中的所有内容都是Clojure代码.不幸的是,我不能直接在Clojurescript中定义宏,我必须在Clojure中定义它们,然后使用它们将它们带入Clojurescript命名空间
(ns X.clojurescript.abc
(:require-macros [X.clojure.def :as clj]))
Run Code Online (Sandbox Code Playgroud)
这可以.但是,如果宏(在X.clojure中定义)需要引用Clojurescript命名空间(X.clojurescript)中定义的内容,该怎么办?问题是Clojure编译器在解析其他命名空间时不会查看我的Clojurescript命名空间(单独的目录).
我通过简单地在我的Clojure代码中创建一个命名空间来解决这个问题,该命名空间具有与Clojurescript中相同的命名空间和所需的定义,但这看起来有点愚蠢.所以,举例来说,如果我需要X.clojurescript.abc.y在我的宏,我只是将创建Clojure的一侧DEFS一个伪Y在X.clojurescript.abc我Clojure的版本额外的命名空间; 有点愚蠢.
我如何处理需要在Clojurescript方面引用某些内容的宏?
我正在使用clj-webdriver在Clojurescript Web应用程序上进行一些基于Selenium的测试.有时,应用程序本身中有一些东西,我希望在测试运行时能够摆弄它.我看到clj-webdriver有一些调用(execute-script js args)它需要一串Javascript代码并在当前测试浏览器上运行它.我测试了这个,它似乎工作.我想传递clojurescript代码execute-script.我需要一些能将我的Clojure表单编译成Clojurescript代码的东西.
我看到以下问题与此有关.它说要使用离合器的js/emit功能.我搜索了离合器,发现它只在cljs-views.clj中的(视图)中提到过我在repl中尝试了以下内容:
user> (use 'com.ashafa.clutch.cljs-views)
nil
user> view
<core$comp$fn__4034 clojure.core$comp$fn__4034@ebd3f80>
user> js/emit
CompilerException java.lang.RuntimeException: No such namespace: js, #compiling (NO_SOURCE_PATH:1)
user>
Run Code Online (Sandbox Code Playgroud)
这不是特别令人惊讶,js如何成为常规的clojure namesapce?但是如何使用这个(或任何其他)系统生成我可以传递给的Clojurescript(javascript)代码execute-script?
那么,有web框架,有GUI框架,我只是想知道是否有ruby的控制台/命令行框架?
具体来说,我希望能够:
不必是一个统一的框架.但我注意到在ruby中编写控制台应用程序似乎有些麻烦.是否有任何工具可以使这更容易?
如果我有"a.py"
from google.appengine.ext import db
class A(db.Model):
db.ReferenceProperty(b.B)
...other stuff
Run Code Online (Sandbox Code Playgroud)
和另一个文件"b.py"
from google.appengine.ext import db
class B(db.Model):
db.ReferenceProperty(a.A)
...other stuff
Run Code Online (Sandbox Code Playgroud)
看起来Python根本不允许循环依赖.通常我猜你会改变代码,这样两个类实际上可以解决自己而不直接相互导入.也许通过第三中间人来巩固他们对彼此的引用?但我不能只使用普通的中间类,因为所有类最终都需要持久保存到数据库中?是否有任何正确的解决方案来构造上述代码,使其有效?
我有一种感觉,我会得到很多"糟糕的代码","解耦","糟糕的设计"等评论.所以我想问一下,如果你这么说,请说明你用一个实际的例子做什么.有没有任何解决方案可以让参考,类和模块保持原样?
谢谢.
在我的clojurescript代码中,我有以下内容:
(defn onload [] (repl/connect "http://localhost:9000/repl"))
(set! (.-onload js/window) onload)
Run Code Online (Sandbox Code Playgroud)
Clojurescript repl在开发中非常有用,但我在制作过程中将它留在代码中犹豫不决.在开发(简单编译)期间使用上述代码的最简洁方法是什么,但在生产(高级编译)期间不存在?
我想要的东西给了我传递给函数的实际值的序列,类似于javascript函数中的参数值.
我知道我可以使用获取整个函数参数列表
(defn fx [& args]
args)
<= (fx {:a 1} 2)
=> ({:a 1} 2)
Run Code Online (Sandbox Code Playgroud)
但这消除了我的功能上的arity.我希望有类似的东西
(defn fx [{:keys [a]} b]
(MAGIC_FUNCTION_THAT_RETURNS_THE_ARGS_VALUES))
<= (fx {:a 1} 2)
=> ({:a 1} 2)
Run Code Online (Sandbox Code Playgroud)
是否有可能获得传递给函数的原始值序列?
假设我有具体的类 Cat、Dog 和 Parrot,以及以下接口:
class HasGuid {
HasGuid.fromId(String id);
}
Run Code Online (Sandbox Code Playgroud)
我的目标是保证 Cat、Dog 和 Parrot 都有一个fromId命名构造函数。所以,我可以拨打这样的电话:
Cat.fromId("Whiskers") =returns> [A Future<Cat> object with id "Whiskers"]
Dog.fromId("Fido") =returns> [A Future<Dog> object with id "Fido"]
Parrot.fromId("Polly") =returns> [A Future<Parrot> object with id "Poly"]
Run Code Online (Sandbox Code Playgroud)
fromId正在通过网络进行呼叫,因此我将其作为Future. 我基本上想要一份合同,规定任何混合/扩展/实现/任何类的HasGuid类都将具有fromId. fromId类中的位置T将接受一个身份字符串并返回一个Future<T>.