在Martin Odersky的"Scala编程"一书中,它解释了为什么scalac
看起来很慢的原因(第114页):
原因是每次编译器启动时,它都会花时间扫描jar文件的内容并进行其他初始工作,甚至在查看您提交给它的新源文件之前.
每次编译开始时扫描jar文件的编译好处是什么?实际上,如果大多数开发人员使用FSC(快速Scala编译器)来避免这种默认行为,为什么scala的作者没有删除这些扫描?
为什么javac
表现不一样?
让我们假设一个使用构建器模式构造的对象.
此构建器模式将包含一个build
侧重于字段验证然后转换为目标类型的方法.
可以使用以下方式实现此验证:
Either[FailureObject, TargetObject]
类型Try[TargetObject]
(Scala 2.10的新功能)Validation[FailureObject, TargetObject]
或者ValidationNEL[FailureObject, TargetObject]
来自scalaz图书馆我读到Validation
过度Either
类型的一个主要优点是Validation
可以"开箱即用"累积故障.
但那"新" Try
方式呢?我注意到,Try
有"一元"的方法开箱也是一样的map
,flatMap
等...什么是真正与任何一种类型的不帮助失踪Projection
.
因此,我想象每个字段验证方法返回a Try[FieldType]
,更确切地说,在任何失败的情况下,a Try[SpecificFieldExceptionType]
; 这个嵌套的包含String
消息字段和rootCause字段,可以在整个build
方法中累积.
使用Scala 2.10,可以或应该Try
练习替换scalaz验证库以进行简单验证,例如构建器模式涉及吗?
**编辑****
通过阅读Try
源代码,它听起来Try
不能累积多个异常,因此面向失败快速.甚至Try.flatMap
返回可能的先前失败,因此没有积累的概念:
def flatMap[U](f: T => Try[U]): Try[U] = this.asInstanceOf[Try[U]]
Run Code Online (Sandbox Code Playgroud)
相反ValidationNEL
,处理累积功能.
任何确认?
我使用Bootstrap 3.0 的Modal功能.
我有这个代码:
<a data-toggle="modal" href="/myNestedContent" data-target="#myModal">
Open the modal containing the content
</a>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
//nested content will be inserted here
</div>
Run Code Online (Sandbox Code Playgroud)
当我点击锚点(链接)时,整个工作=>我看到带有内容的模态.
但是,当我使用Javascript方式(而不是链接)来显示这样的模态:
$('#myModal').modal('show');
Run Code Online (Sandbox Code Playgroud)
我只看到淡化效果而没有显示模态...
当我开始点击链接,那么调用javascript,它的工作原理.(副作用?)
当我以javascript方式开始时,即使链接仅显示没有模态的淡入淡出效果.
可能是..来自modal
Javascript方法的错误?
有关信息,我使用的脚本的声明顺序正确:
<script src="//code.jquery.com/jquery.js"></script>
<script src="javascripts/jquery.form.min.js"></script>
<script src="javascripts/bootstrap.min.js"></script>
Run Code Online (Sandbox Code Playgroud) javascript jquery modal-dialog twitter-bootstrap twitter-bootstrap-3
我刚刚从Angular遇到一个奇怪的行为:
这是场景:
在注册表单中,我想检查电子邮件的唯一性(通过http调用服务器).
因此,我创建了一个名为emailUnique
其客户端代码的指令:
<form name="form" novalidate>
<!-- some other fields -->
<input name="email" type="email" ng-model="user.email" required email-unique/>
</form>
Run Code Online (Sandbox Code Playgroud)
对于帖子的其余部分,让我们假设用户正在输入:michael
,这显然不是有效的邮件.
让我们看一下我的指令代码的有趣部分,触发我感兴趣的行为:
angular.module('directives.emailUnique', [])
.directive('emailUnique', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, el, attrs, ctrl) {
ctrl.$parsers.push(function (viewValue) {
console.log(viewValue); //What do you expect here for viewValue? answer below
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
在给出答案之前,乍一看,答案在逻辑上是:
undefined
Run Code Online (Sandbox Code Playgroud)
为什么?因为:
type="email"
属性而不是简单type="text"
michael
不是有效的邮件.经过测试,答案undefined
如预期.我的完整指令的逻辑将基于此,整个工作正常.
现在,让我们重命名指令:emailUnique
成为somethingUnique
.
客户现在: …
我有点困惑.
从文档:
播放默认线程池 - 这是默认线程池,其中执行Play Framework中的所有应用程序代码,不包括一些迭代代码.它是Akka调度程序,可以通过配置Akka进行配置,如下所述.默认情况下,每个处理器有一个线程.
是否造福包裹在阻塞数据库调用Future
,在调用Future
本身被由包裹async
控制器(它返回),为了让默认线程池处理其他用户的请求?
它只是将阻塞代码移动到另一个线程(来自专用的ExecutionContext)中,但保留Action
未阻塞.
我遇到过这篇文章,但我对给出的答案并不满意.
实际上,如果我让数据库在默认线程池中调用阻塞,那么在此期间它是否可能阻止处理不依赖于数据库的其他用户请求?
注意:我的数据库(Neo4j)没有异步驱动程序.
asynchronous scala nonblocking playframework playframework-2.3
使用Cordova/Phonegap,翻译iOS虚拟键盘上的"完成"按钮的最简单方法是什么?
例如,我的iPhone配置为使用法语.
但是,该按钮仍显示"完成"按钮,而不是经典的法语改编词:"确定".
在设计模式 - 可重用面向对象软件的元素书中说:
在只有一个实现(一对一)的情况下,创建一个抽象的实现者类是没有必要的.这是桥模式的退化情况; Abstraction和Implementor之间存在一对一的关系.然而,当类的实现中的更改不得影响其现有客户端时,这种分离仍然有用 - 即它们不应该被重新编译,只需重新链接.
我对编译时间的好处表示怀疑,因为我无法想象Java中的一个案例,即实现中的更改会重新编译其超类(在本例中为abstract).
例如,如果我们有X扩展Y并且客户端执行:
Y y = new X();
Run Code Online (Sandbox Code Playgroud)
X中的更改并不意味着重新编译Y(当然,如果我们不想更改X的方法签名)
使用Bridge Pattern时完全相同:
YAbstraction yabstraction = new YRefinedAbstraction(new XImplementor());
Run Code Online (Sandbox Code Playgroud)
XImplementor中的更改并不意味着重新编译YAbstraction.
因此,根据我的说法,这种好处不会发生在Java中,并且需要一对一=>无桥模式.
也许子类强制超类的更改要在其他语言中重新编译?喜欢SmallTalk和C++?
你有什么看法?
假设一张表CAR
有两列CAR_ID (int)
和VERSION (int)
.
我想检索每辆车的最大版本。
所以有两种解决方案(至少):
select car_id, max(version) as max_version
from car
group by car_id;
Run Code Online (Sandbox Code Playgroud)
或者 :
select car_id, max_version
from ( select car_id, version
, max(version) over (partition by car_id) as max_version
from car
) max_ver
where max_ver.version = max_ver.max_version
Run Code Online (Sandbox Code Playgroud)
这两个查询的性能相似吗?
在DDD方法中,命名域服务组件和应用程序服务组件的最佳实践是什么?
例如,我应该在我的应用程序层中有一个名为RoomReservationService的服务,并且在我的域层中还有一个名为RoomReservationService的服务; 第一次委托给对方?
实际上,当一个应用程序服务没有收集很多域服务时,这意味着我找不到它们之间的不同名称,我如何命名它而不引起任何混淆?
网络上大多数涉及 WebSocket 的文章都是关于内存聊天的。
我对不太即时的聊天感兴趣,这种聊天是持久的,就像博客帖子的评论一样。
我有一个由两台服务器组成的集群,处理客户端请求。
我想知道处理将数据库更新推送到相应客户端的最佳策略是什么。
当我使用 Heroku 来处理这个集群(由 2 个网络测功机组成)时,我显然阅读了本教程,旨在构建一个在所有客户端之间共享的聊天室。
它使用 Redis 来集中传入的消息;每个服务器侦听新消息以通过 websocket 连接传播到 Web 客户端。
我的用例的不同之处在于我有一个 Neo4j 数据库,将任何客户端写入的每条消息持久保存到其中。
我的目标是通知特定房间的每个客户,客户刚刚保留了新消息/评论。
使用与上面链接的教程类似的架构,如何仅过滤新消息以传播给用户?有没有一种简单有效的方法来告诉Redis:
“(WebSocket 说)当我的客户端启动 websocket 连接时,我会注意查询所有持久消息并将它们发送到客户端,但是我希望你(Redis)向我提供所有新消息,但我没有发送给客户,以便我能够提供它们。”
如何防止Redis在每次建立websocket连接时发布整个会话?这会导致重复,因为数据库查询此时已经提供了现有内容。
java ×3
scala ×3
compilation ×2
javascript ×2
angularjs ×1
architecture ×1
asynchronous ×1
bridge ×1
cordova ×1
forms ×1
heroku ×1
html5 ×1
ios ×1
jquery ×1
modal-dialog ×1
nonblocking ×1
oracle ×1
redis ×1
scalaz7 ×1
sql ×1
translation ×1
websocket ×1