在Scala中,我可以使用Guice注入Scala object吗?
例如,我可以注入s以下对象吗?
object GuiceSpec {
@Inject
val s: String = null
def get() = s
}
Run Code Online (Sandbox Code Playgroud) Django创建可重用模板的方法是什么?
示例:假设我的很多页面都包含"最新消息"框并遵循DRY原则,我想定义一次并在其他页面中重复使用它.我如何使用Django(或Jinja2)模板执行此操作?
阅读Django的模板文档我得到的结论是Django模板提供了"自上而下"的继承,其中子模板本身决定了它将嵌入哪个超模板:
<!-- Super-template (not valid, for illustration): -->
<html>
<head><title>Title</title></head>
<body>{% block content %}{% endblock %}</body>
</html>
Run Code Online (Sandbox Code Playgroud)
<!-- Sub-template: -->
{% extends "base.html" %}
{% block content %}
<div class="latest-news">News</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
那么在几个地方重用块(子模板)的技术是什么?
IntelliJ具有生成Java getter的很酷功能.例如,对于字段private final String foo,它将生成一个getter getFoo().
有没有什么办法可以配置IntelliJ来生成格式的getter String foo()?我主要使用不可变对象,并喜欢这种语法.
我知道参数字段(如下x例所示)的行为与普通字段相同; 所以你可以在方法中引用它们:
class Test(val x: Int) { // x is a parametric field
override def toString = "Test: " + x;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果删除关键字val,代码仍会编译(并且查看和.class输出x仍然是类的成员).所以我想知道,参数字段(即val x: Int上面的)和构造函数参数(x: Int)之间有什么区别?
(在我的脑海中,我希望构造函数的范围x可能不包括类似的方法toString.)
我有一个Workspace和Document实体,其想法是工作空间可以包含零个,一个或多个文档.我对此进行建模的第一种方法是:
case class Workspace(name: String, documents: Seq[Document])
Run Code Online (Sandbox Code Playgroud)
但由于我的工作区可能包含许多文档,因此无法很好地扩展.幸运的是,我的业务需求,允许我单独处理工作空间和文件(在这个意义上,当我有一个工作空间,也没有迫使我考虑其中包含的所有文件的原因还是不变).
问:我想知道:我将如何建模Workspace和Document在SORM使我有两个之间的联系,但没有加载一个工作区的所有文件?我想有一个存储库可以让我访问工作区的文档,并提供分页支持.)
case class Workspace(name: String)
case class Document(name: String, /* ... */)
trait WorkspaceRepository {
def children(ws: Workspace, offset: Long, limit: Long)
}
Run Code Online (Sandbox Code Playgroud) PairRDD当 RDD 的键是或包含枚举时,对 Spark的某些操作无法正常工作。
例如,下面的 Spark 代码需要两周的工作日并按工作日计算它们:
import java.time.DayOfWeek
val weekdays: Seq[(DayOfWeek, Int)] = DayOfWeek.values().map(dow => (dow, 1))
val numPartitions = 2 * weekdays.size
val result = sc
.parallelize(weekdays ++ weekdays, numPartitions)
.reduceByKey(_ + _)
.collect
.toSeq
println(result)
Run Code Online (Sandbox Code Playgroud)
在输出中,我希望每个工作日(例如,MONDAY)计数为 2,但是,在我的集群上,我得到:
WrappedArray(
(THURSDAY,1), (SATURDAY,1), (WEDNESDAY,2), (SATURDAY,1),
(MONDAY,2), (TUESDAY,2), (THURSDAY,1), (FRIDAY,2), (SUNDAY,2)
)
Run Code Online (Sandbox Code Playgroud)
如果您在具有单个节点(或设置numPartitions为 1)的集群上运行此程序,则结果是正确的(即,所有计数均为 2)。
背景:我打算将我用 C++ 编写的库移植到Java.代码处理d维点的大小为n的列表,需要计算标量产品等.我想让我的代码独立于点的存储格式,并为此引入了一个接口,
public interface PointSetAccessor
{
float coord(int p, int c);
}
Run Code Online (Sandbox Code Playgroud)
允许我获得Ç个坐标(0≤ ç < d的的)p个点(0≤ p < Ñ).
问题:由于代码必须是非常快,我想知道是否这会减慢性能,与此相反的是直访问模式等points[p][c],其中,points是的阵列Ñ阵列,其中的每一个保持d点坐标.
令人惊讶的是,情况恰恰相反:代码(见下文)通过a的"间接"访问速度提高了20%PointSetAccessor.(我用这个来衡量time java -server -XX:+AggressiveOpts -cp bin Speedo,前者为14s,后者为11s.)
问题:知道为什么会这样吗?好像Hotspot决定更积极地进行优化,或者在后一版本中有更大的自由度?
代码(计算无意义):
public class Speedo
{
public interface PointSetAccessor
{
float coord(int p, int c);
}
public static final class ArrayPointSetAccessor …Run Code Online (Sandbox Code Playgroud) scala ×4
java ×3
apache-spark ×1
django ×1
enums ×1
getter ×1
guice ×1
jinja2 ×1
jvm-hotspot ×1
performance ×1
sorm ×1
templates ×1