小编ayv*_*ngo的帖子

如何强制进行延迟值计算

什么是强制计算惰性值的惯用scala方法?

scala lazy-evaluation

9
推荐指数
1
解决办法
2293
查看次数

akka actor如何在线程之间进行交互

我读过akka文档,在使用akka时无法清楚地理解线程交互.文档可能会忽略这个事情,但对我来说并不是那么明显.

所有的akka​​演员似乎都被称为同一个线程.我将actor视为共同程序,每次收到调用时都有自己的堆栈重置.

你可以执行一系列直线切换的演员链.每个接收执行小的非阻塞操作并强制另一个接收进一步工作.没有事件循环,可以处理actor系统之外的消息.

我想从其他线程捕获请求,执行控制操作,并等待另一条消息.

有一些用例概述了我的需求.

  1. 有一些线程不断地从某些来源轮询数据.一旦数据匹配模式,它就会根据actor调用事件驱动的处理程序.逻辑控制器做出决定并将其传递给工人.应该有两个持久的线程.一个线程在轮询上不断工作,另一个线程以异步方式工作以控制它的工作.你不应该让akka actor第一个线程,因为它们打破了轮询周期,第一个线程不应该阻止actor,所以他们需要另一个线程.

  2. 有一种双面棋盘游戏.一方有一个控制器线程,用于安排计算时间与板服务器和其他工作交互.其他线程是一个繁重的计算线程,它循环不同的变体,因为它具有阻塞性,所以无法用akka编写

我知道现有的akka​​期货,但它们代表了一个工作任务,一旦被解雇并在执行目标后关闭.期货与akka演员很好地结合在一起,但无法表达循环的工作线程.

Akka actor系统包含不同类型的网络事件循环.您可以使用其内置的远程actor系统或众所周知的0mq协议.但是使用网络进行线程交互似乎对我来说太过分了.

将非akka线程与akka一起粘贴的假设方法是什么?我应该编写几个特殊的过程来以线程安全的方式执行消息传递吗?

multithreading akka

8
推荐指数
1
解决办法
2287
查看次数

scala中的间接递归泛型类型定义

直接类型递归正常工作:

trait TT[T<:TT[T]]
Run Code Online (Sandbox Code Playgroud)

但我可以用天真的方法做出间接的

trait UU[V <: VV[UU[V]]]
trait VV[U <: UU[VV[U]]]
Run Code Online (Sandbox Code Playgroud)

给我错误:

CyclicTraits.scala:23: error: type arguments [UU[V]] do not conform to
    trait VV's type parameter bounds [U <: UU[VV[U]]]
trait UU[V <: VV[UU[V]]]
              ^
CyclicTraits.scala:25: error: type arguments [VV[U]] do not conform to
    trait UU's type parameter bounds [V <: VV[UU[V]]]
trait VV[U <: UU[VV[U]]]
              ^
Run Code Online (Sandbox Code Playgroud)

如何正确表达间接类型参数递归?

generics recursion scala

8
推荐指数
1
解决办法
419
查看次数

如何在emacs中设置缓冲区局部变量

我想将缓冲区局部变量(特别是标记环)设置为默认值(nil).我该怎么做这个任务?是创建某个函数并将其绑定到init.el文件中的键序列的唯一选项吗?

emacs

8
推荐指数
1
解决办法
1848
查看次数

如何使ListView宽度适合其单元格的宽度

我有一个自定义单元工厂的ListView.我在单元格minWidth上计算最大值,并将其设置为整个ListView的minWidth.因此,布局中受其他区域约束的ListView会缩小到minWidth.但它所拥有的细胞大小调整为首选宽度,而不是最小.因此,节点不适合包含视口,并显示水平滚动条.

这很讨厌.我想让每个单元格完全适合ListView,并摆脱滚动条.更确切.当ListView减小到其最小宽度时,其所有单元格也应减小到此最小宽度.

我正在寻找一些控制属性来切换单元调整大小的策略,以便在没有预定义开关的情况下实现所描述的行为.


更新:添加了图形示例

我创建了SplitPane来简化测试布局.我可以通过用鼠标移动它的分隔符来定义布局限制.

第一个镜头显示了初始问题:不遵守单元节点的实际尺寸(min,max,pref).ListView始终使用prefWidth,即使它大于视口宽度.因此,可以避免使用水平滚动.

坏

之后,我尝试手动设置较小的首选宽度.所以细胞现在完全可见.这不是解决方案.我给出这个镜头来证明单元格具有足够小的minWidth以适应ListView.

丑陋

最后一枪也是丑陋的.它留下了可能充满细胞内容的自由空间.这很自然:如果视口大于首选宽度且小于最大宽度,则应该用于调整单元格内容的大小.

可以通过切换到显式指定的静态大小的元素来抑制该问题.但这样做意味着放弃动态布局的所有好处:程序员每次使用CSS应用新外观时都必须更改大小常量,并且禁止用户调整窗口大小或使用鼠标移动分隔符.

这也是一个糟糕的解决方案.我需要什么 - 使javafx的布局引擎工作.ListView的最小宽度应该是其单元格的最小最小宽度.ListView的最大宽度应该是其单元格的最大最大宽度.ListView的首选宽度应该是其单元格的最大首选宽度.并且ListView的实际宽度应该由其父(本例中的SplitPane)设置,并且与所有三个布局边界相关.之后,这个大小应该传递给细胞.

仅当某些单元格的最小宽度太大而无法放入视口时,才应显示水平滚动条.

layout listview javafx

8
推荐指数
1
解决办法
5346
查看次数

为什么在某些情况下会忽略高阶隐含?

我得到一个奇怪的编译器错误,关于实际存在的隐式但由于某种原因无法找到.所以我构建了一个小的测试用例,可以重现神秘的行为.

trait Hide {
  type T
}
object HideString extends Hide {
  override type T = String
}
object HideBool extends Hide {
  override type T = Boolean
}
Run Code Online (Sandbox Code Playgroud)

简单类型用作隐式转换的明确目标.

def id[H <: Hide, C](x : C)(implicit ev : C => H#T) : H#T = ev(x)
def drop[H <: Hide, C](x : C)(implicit ev : C => H#T) : Int = {
  println(ev(x))
  1
}
def idSeq[H <: Hide, C](x : Seq[C])(implicit ev : Seq[C] => Seq[H#T]) : Seq[H#T] = …
Run Code Online (Sandbox Code Playgroud)

scala implicit

8
推荐指数
1
解决办法
162
查看次数

设置sbt scalafx项目

javafx现在在oracle-jdk中.

scalafx在其存储库中提供了美味的例子

我无法回答的主要问题是"如何开始使用scalafx"?

如何在我的sbt项目中添加scalafx libary依赖项?

scala sbt javafx-2

7
推荐指数
1
解决办法
1356
查看次数

用于管理对象池的scala-way

scala管理对象池的首选方法是什么?

我需要创建和删除单线程的大规模对象(不需要同步).在c ++中,我使用了静态对象数组.

什么是在scala中应对它的惯用和有效方法?

scala objectpool

7
推荐指数
1
解决办法
1324
查看次数

根据scala中的其他参数定义默认命名参数

我有一个案例类,存储三个绑定参数.我想定义可以从任何两个参数构建类的伴随对象,看起来像下面的示例,这显然是不正确的:

def test(start : Float = end - duration, duration : Float = end - start, end : Float = start + duration) {
  require( abs(start + duration - end) < epsilon )
  ...
}
val t1 = test(start = 0f, duration = 5f)
val t2 = test(end = 4f, duration = 3f)
val t3 = test(start = 3f, end = 5f)
Run Code Online (Sandbox Code Playgroud)

我可以用什么技巧来获得类似的用法语法?

scala named-parameters

7
推荐指数
1
解决办法
777
查看次数

使方法实际内联

我伪造了一个简单的例子来检查@inline注释行为:

import scala.annotation.tailrec

object InlineTest extends App {
  @inline
  private def corec(x : Int) : Int = rec(x - 1)

  @tailrec
  private def rec(x : Int) : Int =
    if (x < 3) x else {
      if (x % 3 == 0)
        corec(x-1)
      else
        rec(x-4)
    }

  @tailrec
  private def rec1(x : Int) : Int =
    if (x < 3) x else {
      if (x % 3 == 0) {
        val arg = x - 1
        rec1(arg - 1) …
Run Code Online (Sandbox Code Playgroud)

annotations scala inline

6
推荐指数
1
解决办法
1337
查看次数