【发布时间】:2021-03-06 21:47:16
【问题描述】:
我知道,一般来说,关于决定将什么建模为效果有很多话要说。这个讨论在 Scala 的函数式编程中的 IO 章节中进行了介绍。
尽管如此,我还没有完成这一章,我只是在与 Cats IO 一起讨论之前将它从头到尾浏览。
与此同时,我有点需要在工作中尽快交付一些代码。 它依赖于一个完全关于突变的 Java 库。该库很久以前就开始了,出于遗留原因,我认为它们没有改变。
总之,长话短说。实际上将任何变异函数建模为 IO 是封装变异 java 库的可行方法吗?
Edit1(应要求我添加了一个 sn-p)
准备模型,改变模型而不是创建新模型。例如,我会将 jena 与 gremlin 进行对比,gremlin 是一个基于图形数据的函数库。
def loadModel(paths: String*): Model =
paths.foldLeft(ModelFactory.createOntologyModel(new OntModelSpec(OntModelSpec.OWL_MEM)).asInstanceOf[Model]) {
case (model, path) ⇒
val input = getClass.getClassLoader.getResourceAsStream(path)
val lang = RDFLanguages.filenameToLang(path).getName
model.read(input, "", lang)
}
那是我的 scala 代码,但网站中记录的 java api 看起来像这样。
// create the resource
Resource r = model.createResource();
// add the property
r.addProperty(RDFS.label, model.createLiteral("chat", "en"))
.addProperty(RDFS.label, model.createLiteral("chat", "fr"))
.addProperty(RDFS.label, model.createLiteral("<em>chat</em>", true));
// write out the Model
model.write(system.out);
// create a bag
Bag smiths = model.createBag();
// select all the resources with a VCARD.FN property
// whose value ends with "Smith"
StmtIterator iter = model.listStatements(
new SimpleSelector(null, VCARD.FN, (RDFNode) null) {
public boolean selects(Statement s) {
return s.getString().endsWith("Smith");
}
});
// add the Smith's to the bag
while (iter.hasNext()) {
smiths.add(iter.nextStatement().getSubject());
}
【问题讨论】:
-
不确定 是什么意思" 实际上将任何变异函数建模为 IO 是封装变异 java 库的可行方法"。比如不确定你是否在问这是否是正确的做法,或者这是否真的有必要,或者是否有其他方法。此外,最好提供一个小的 sn-p 显示您如何使用该库。
-
我只是说经验丰富的 scala 开发人员通常选择的最流行的选项是什么。而且是我认为实际上没有人做的事情,因为它知道缺点
-
再说一次,如果不知道库是如何工作的以及您将如何使用它,很难说清楚。
-
添加了实际的 java api 片段,因为我的代码已经在做一些 scala shinanigan :)
-
你需要用那个 API 做什么?只是阅读模型还是使用模型?
标签: scala scala-cats cats-effect