如何在一行中写下以下代码:
(-> 10 pow9)
Run Code Online (Sandbox Code Playgroud)
pow9是哪里的:
(def pow9 (partial #(Math/pow % 9)))
Run Code Online (Sandbox Code Playgroud)
如果我写,(-> 10 (partial #(Math/pow % 9)))我会回来#<core$partial$fn__4228 clojure.core$partial$fn__4228@62330c23>,写作(-> 10 #(Math/pow % 9))失败CompilerException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.ISeq, compiling:(NO_SOURCE_PATH:1:1),
虽然(-> 10 pow9)工作正常.
更一般的问题是如何使用 - > with function接受多个参数,即如何使其工作(-> 10 #(+ % 10))?
->将先前结果作为第一个参数->>插入,将前一个结果作为最后一个参数插入.
user=> (-> 10 (Math/pow 9))
1.0E9
user=> (-> 10 ((partial #(Math/pow % 9))))
1.0E9
Run Code Online (Sandbox Code Playgroud)
注意额外的parens.
实际上你根本就不需要局部:
user=> (defn pow9 [x] (Math/pow x 9))
#'user/pow9
user=> (-> 10 pow9)
1.0E9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |