我想做这个:
abstract class Context {
def getInt(id: Int): Int
}
abstract class Dependency[+T]
(val name: String, val id: Int)
extends Function1[Context,T]
class IntDependency(name: String, id: Int)
extends Dependency[Int](name, id) {
def apply(implicit context: Context): Int =
context.getInt(id)
}
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个这样的错误信息:
class IntDependency needs to be abstract, since method apply in trait
Function1 of type (v1: Context)Long is not defined (Note that T1 does
not match Context)
Run Code Online (Sandbox Code Playgroud)
我理解implicits通常应该是第二个参数列表的一部分,但我无法弄清楚如何编码它以便编译,并给出我想要的结果.
说明:我正在尝试创建一个框架,其中可以定义"Function"对象,该对象可以依赖于其他函数来计算它们的值.所有函数应该只接受一个Context参数.上下文知道其他函数的"结果".函数实例应该是不可变的,状态驻留在上下文中.我希望函数在创建时创建"依赖"字段,隐式获取上下文,并返回该上下文中依赖项的值,以便访问apply方法内部的依赖关系"感觉"访问参数或字段,即没有明确地将上下文作为参数提供给依赖项.
以下Scala声明是可以的:
trait Base[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] {
// ...
}
trait Meta[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Ordered[Meta[_,_,_]] {
// ...
}
trait BaseWithID[B <: BaseWithID[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Base[B,M,ID] with Ordered[B] {
// ...
}
trait BaseWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends BaseWithID[B,M,ID] {
// ...
}
trait MetaWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends Meta[B,M,ID] {
// ... …Run Code Online (Sandbox Code Playgroud) 我正在研究Scala数据库框架/包装器,并在Twitter上遇到了Gizzard.虽然我一开始印象深刻,但在阅读限制时我冷却了.他们说你所做的所有数据库操作都必须是幂等的和可交换的.如果我理解得当,这基本上几乎没有留下任何东西.例如,如果我有一个带整数计数器的实体,则必须递增.我可以使用"增量"操作,也可以使用"设置"操作.但是增量不是幂等的(如果你运行它两次,你得到一个不同的结果然后运行一次),并且set不会是可交换的(设置前5然后2给出不同的结果然后设置前两个然后设置5).那么"插入 - 如果缺席"还有什么区别,这对大多数用例来说都不是很有用.分布式数据库框架有何局限性,以至于你基本上无法对它做任何有用的事情?我必须遗漏一些重要的东西.
[编辑]除了"insert-if-absent"(以及"delete-if-present")之外,我认为"compare-timestamp-and-set"既是幂等的又是可交换的,如果更改排队而不是丢弃,什么时候"以前的变化"仍然缺失.但我不知道是否有任何数据库实现了这一点.
我在Eclipse中创建了一个Bundle,并在"Overview"选项卡中使用了"Launch the Framework"链接.我在我的bundle中创建了一个接口(TestService),以及应该为它生成代理的代码(在Helper中).我在Bundle的Activator中调用此代码,并得到:
Caused by: javassist.NotFoundException: com.test.services.TestService
at javassist.ClassPool.get(ClassPool.java:436)
at com.test.services.Helper.get(Helper.java:46)
Run Code Online (Sandbox Code Playgroud)
它会在第一个ClassPool.get()中抛出:
ClassPool pool = ClassPool.getDefault();
CtClass result = pool.get(TestService.class.getName());
...
Run Code Online (Sandbox Code Playgroud)
TestService是公共的,在同一个包中,而Bundle是Helper,它生成Exception.显然,仅仅执行"ClassPool.getDefault()"并不够好.那么我需要做什么才能使ClassPool看到Bundle中的类?我是否必须导入自己的包裹?
我只是安装了ASM Eclipse插件(并重新启动),它提供了一个改进的字节码大纲,我可以将它用于JRE类,但是查看我自己的代码,我在标题中收到错误消息.
我的java项目是自动构建的,我的源文件没有错误,我可以看到项目属性的Java Build Path中定义的Default输出文件夹中的类文件.
我们有时会从客户那里收到这个奇怪的错误(自动地,直到现在还没有填写用户报告),我们没有人能理解它。用户在 Win7 机器上启动我们的 Swing Java-Web-Start“胖客户端”,最终使用一些应该生成 PDF 文档的操作(使用古老的、修改过的 Apache FOP 版本),最终得到这个错误。到目前为止,它在我们这边是不可复制的。谷歌也没有帮助解决这个问题。
最大的问题是,当需要 awt dll 来激活导致错误的操作时,怎么会缺少 awt dll?
有什么东西可以卸载awt dll吗?堆栈跟踪几乎总是相同的,我们没有发现任何其他错误的证据。这可能是未记录的先前本机错误的结果吗?
编辑:PDF 生成在后台线程中运行,而阻塞的“等待”对话框可防止用户关闭或以其他方式操作 UI。
java.lang.UnsatisfiedLinkError: no awt in java.library.path
at java.lang.ClassLoader.loadLibrary
at java.lang.Runtime.loadLibrary0
at java.lang.System.loadLibrary
at sun.java2d.cmm.lcms.LCMS$1.run
at java.security.AccessController.doPrivileged
at sun.java2d.cmm.lcms.LCMS.getModule
at sun.java2d.cmm.lcms.LcmsServiceProvider.getModule
at sun.java2d.cmm.CMMServiceProvider.getColorManagementModule
at sun.java2d.cmm.CMSManager.getModule
at java.awt.color.ICC_Profile.getInstance
at java.awt.color.ICC_Profile.getInstance
at org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBColorProfile
at org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace
at org.apache.fop.render.pdf.PDFRenderingUtil.addsRGBColorSpace
at org.apache.fop.render.pdf.PDFRenderingUtil.setupPDFDocument
at org.apache.fop.render.pdf.PDFDocumentHandler.startDocument
at org.apache.fop.render.intermediate.IFRenderer.startRenderer
at org.apache.fop.area.RenderPagesModel
at org.apache.fop.area.AreaTreeHandler.setupModel
at org.apache.fop.area.AreaTreeHandler
at org.apache.fop.render.RendererFactory.createFOEventHandler
at org.apache.fop.fo.FOTreeBuilder
at org.apache.fop.apps.Fop.createDefaultHandler
at org.apache.fop.apps.Fop
at org.apache.fop.apps.FopFactory.newFop
at …Run Code Online (Sandbox Code Playgroud) 我刚刚了解了CAF,即C++ Actor Framework.
让我感到惊讶的一件事是,通过网络提供演员的方法是将其"发布"到特定的TCP端口.
这基本上意味着您可以发布的actor的数量受到您拥有的端口数量的限制(64k).由于你需要一个端口来发布一个actor和一个端口来访问一个远程actor,我假设两个进程每个最多可以共享大约32k个actor,而它们每个可能在商品服务器上拥有一百万个actor. .如果集群有10个节点,情况会更糟.
为了使发布可扩展,每个进程应该只需要为一个系统中的每个actor 打开1个端口,并打开1个连接到他们想要访问的每个actor系统.
有没有办法发布一个actor作为actor系统中所有actor 的代理(最好没有任何重大的性能损失)?
假设我有一个带有toInt方法的Point类,并且Map[Point,V]对于某种类型我有一个不可变的V。在Scala中将其转换为an的最有效方法是IntMap[V]什么?这是我当前的实现:
def pointMap2IntMap[T](points: Map[Point,T]): IntMap[T] = {
var result: IntMap[T] = IntMap.empty[T]
for(t <- points) {
result += (t._1.toInt, t._2)
}
result
}
Run Code Online (Sandbox Code Playgroud)
[编辑]我的意思主要是更快,但是即使它们显然不是更快,我也会对较短的版本感兴趣。
如果我写:
def getShort(b: Array[Byte]): Short
Run Code Online (Sandbox Code Playgroud)
在Scala中,我在Java中获得了原始的简短,这很好.但如果我写:
def getChar(b:Array [Byte]):Char
我得到一个scala.Char对象,这不是很好.如果我写:
def getChar(b: Array[Byte]): Character
Run Code Online (Sandbox Code Playgroud)
我得到了一个java.lang.Character,这也不错.
如果Scala"Char"不是Java"char",而Scala"Character"不是Java"char",那还剩下什么?
基于维基百科,我可以进行分层状态分解,其中我有多个正交区域,可以独立地改变状态.
该图显示了如何输入正交区域.我假设该条目在所有地区并行发生.我想知道的是,你如何表达出口?如果每个区域都有一个出口,那么当第一个子区域退出时,或者当它们全部退出时,全局父状态是否会退出?我想表示退出发生在他们全部退出时.那么你如何表达全球母国过渡到下一个全球国家,因为所有的儿童地区已经退出?这总是隐含的吗?
我的具体问题是我的FSM在Initializing global状态下启动.它以并行异步方式向多个外部系统发送多个查询.只有在收到每个查询的答案后,才能继续.因此,我将每个异步并行查询建模为全局初始化状态内的正交区域.每个子区域可以独立地改变状态.当所有儿童区域都达到最终状态时,我可以继续前进.
FSM将在Actor框架中实现,其中异步消息(事件)是唯一的通信方式.
理想情况下,我希望答案指向一个示例图像,因为这样的事情很难用文字表达.