查看源代码every?可以明确原因
(every? string? []) => true
Run Code Online (Sandbox Code Playgroud)
这是因为every?以递归方式实现并用于(nil? (seq coll))结束递归.但是,我的问题是,这种行为有何意义?刚刚绊倒了.
我已经解决了我的问题
(and (seq x) (every? string? x))
Run Code Online (Sandbox Code Playgroud) 的try是在一个宏时,catch在由第一被叫的第二个.如何让以下工作?
(defmacro catch-me []
`(catch ~'Exception ~'ex
true))
(defmacro try-me []
`(try (+ 4 3)
(catch-me)))
Run Code Online (Sandbox Code Playgroud)
扩展try-me看起来很好:
(clojure.walk/macroexpand-all '(try-me))
Run Code Online (Sandbox Code Playgroud)
产量
(try (clojure.core/+ 4 3) (catch Exception ex true))
Run Code Online (Sandbox Code Playgroud)
但是打电话(试试我)产量:
"Unable to resolve symbol: catch in this context",
Run Code Online (Sandbox Code Playgroud)
BTW,这也是你在不尝试时使用catch时在REPL中会得到的信息.
更新:
这就是我可以让它工作的原因(感谢@Barmar),在这里您可以看到我的代码的实际上下文:
(defmacro try-me [& body]
`(try
~@body
~@(for [[e msg] [[com.mongodb.MongoException$Network "Database unreachable."]
[com.mongodb.MongoException "Database problem."]
[Exception "Unknown error."]]]
`(catch ~e ~'ex
(common/site-layout
[:div {:id "errormessage"}
[:p ~msg]
[:p "Error is: " ~e]
[:p "Message …Run Code Online (Sandbox Code Playgroud) 更新使用type作品定义的记录,如与Haskell的差异中所述
type PointRec = { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)
但是当使用data(并因此指定构造函数)定义时,它不会:
data PointRec = PointRec { x :: Number, y :: Number }
setX :: Number -> PointRec -> PointRec
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)
我从编译器得到的错误是
Could not match type
Run Code Online (Sandbox Code Playgroud)
和一些细节.
我能在这做什么?
我需要输出一个带前导零和六位数的数字.在C或Java中,我将使用"%06d"格式字符串来执行此操作.PureScript是否支持格式字符串?或者我将如何实现这一目标?
受上一个问题的启发,将整数列表从java传递给frege函数的最简单方法是什么?@Ingo对答案的评论,我试过了
(Foo/myfregefunction (java.util.List. [1,2,3,4]))
Run Code Online (Sandbox Code Playgroud)
但得到(ctor = constructor):
CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface java.util.List
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?至少java.util.List没有产生ClassCastException; 这是否意味着这是正确的轨道?
我可以从Clojure发送几乎任何Java集合类型的Frege,请参阅将Clojure数据结构转换为Java集合.
顺便说一句,使用plain (Foo/myfregefunction [1,2,3,4])而不是yield ClassCastException clojure.lang.PersistentVector cannot be cast to free.runtime.Lazy,@ Ingo指出,"一个clojure列表不是一个frege列表."在转换时类似的响应java.util.ArrayList.
在弗雷格方面,代码就像
module Foo where
myfregefunction :: [Int] -> Int
-- do something with the list here
Run Code Online (Sandbox Code Playgroud) 在测试时,我想从磁盘读取和写入文件(JSON in,JSON out).我如何在PureScript中执行此操作?在Haskell我有类似的东西
main :: IO ()
main = do
input <- readFile "input.json"
writeFile "output.json" $ process input
Run Code Online (Sandbox Code Playgroud)
我的所有尝试到目前为止都失败了,包括试图使用readFile从import Node.FS.Sync.
顺便说一句,如果我的JSON文件中还有其他(更好)的阅读方式,请告诉我.(我不是JavaScript专家,但我想将一些 - 严格 - Haskell代码移植到JS,以便它可以在其他地方使用.)
这将生成两个不同的ID,这很棒:
#db/id[:db.part/user]
#db/id[:db.part/user]
Run Code Online (Sandbox Code Playgroud)
但是类似下面的内容(我到目前为止尝试过很多想法)会产生两次相同的id,这不是我想要的:
(repeatedly 2 (fn [] #db/id[:db.part/user]))
(for [n [1 2]] #db/id[:db.part/user])
Run Code Online (Sandbox Code Playgroud)
所有产生的东西都像
(#db/id[:db.part/user -1000774] #db/id[:db.part/user -1000774])
Run Code Online (Sandbox Code Playgroud)
每个呼叫产生的号码相同.
我真正想要的是调用NOT根本不生成数字,这样我就可以通过事务添加生成的数据.
有任何想法吗?
为了清楚起见,文档说,"每次调用tempid都会产生一个独特的临时ID."
[在@maxthoursie评论后编辑,无论如何repeat都会遇到这个问题.]