我知道,一般来说,关于决定将什么建模为效果有很多话要说。这个讨论是在 Scala 的函数式编程中关于 IO 的一章中介绍的。
尽管如此,我还没有完成这一章,我只是在与 Cats IO 一起讨论之前端到端浏览它。
同时,我有点需要在工作中尽快交付一些代码。它依赖于一个完全关于突变的 Java 库。该库是很久以前开始的,出于遗留原因,我看不到它们发生变化。
总之,长话短说。实际上将任何变异函数建模为 IO 是封装变异 java 库的可行方法吗?
Edit1(根据要求,我添加了一个片段)
准备好进入一个模型,改变模型而不是创建一个新模型。例如,我会将 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());
}