如何将此java代码更改为clojure?让clojure代码执行相同的操作?
B.java:
package b;
public class B {
int c;
}
A.java:
package b;
import java.util.*;
public class A {
public static void findElement(List<B> a)
{
a.forEach((z) -> {
if (z.c == 1) {
System.out.println(z.c);
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
B x = new B();
x.c = 1;
B y = new B();
y.c = 2;
List<B> d = new ArrayList<B>();
d.add(x);
d.add(y);
findElement(d);
}
}
我曾尝试使用defrecord和defprotocol次,但失败了
谢谢!
答案 0 :(得分:2)
您在示例中使用了大量突变。 Clojure是一种高度鼓励不变性的语言。
这是一个简短的片段:
(defrecord B [c])
(defn find-element [bs]
(filter #(= (:c %) 1) bs))
(let [x (->B 1)
y (->B 2)
d [x y]
r (find-element d)]
(doseq [i r]
(println (:c i))))
但是,我们不会在find-element
内打印元素,而是返回找到的结果并将其存储在r
中。之后我们使用doseq
来检查每个项目以进行打印。
这不是一种在Clojure中思考的非常惯用的方式,我不确定你想要实现什么,但这有点臃肿和OO满。
我建议过clojure basics并在4clojure练习,以内化Clojure的不同方法。