小编asc*_*hil的帖子

什么是采用Ordered [A]的任何子类型的函数的Scala语法?

我想编写一个适用于任何Scala类型的函数,具有总排序(即我可以使用'<').那是什么语法?我想出的最好的是

def lessThan[T <: Ordered[T]](x: T, Y: T) = x < y
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从REPL使用它时,这不起作用:

scala> lessThan(1, 2)
<console>:8: error: inferred type arguments [Int] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
       lessThan(1, 2)
       ^

scala> import runtime._
import runtime._

scala> lessThan(new RichInt(1), new RichInt(2))
<console>:8: error: inferred type arguments [scala.runtime.RichInt] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
       lessThan(new RichInt(1), new RichInt(2))
Run Code Online (Sandbox Code Playgroud)

基本上,我相信我想要相当于这个Haskell代码:

lessThan :: (Ord a) => a -> a -> Bool …
Run Code Online (Sandbox Code Playgroud)

syntax scala subclass

14
推荐指数
1
解决办法
3978
查看次数

扩展Puppet - 什么时候对WEBrick来说太过分了?

我在Docs:Scaling Puppet中找到了以下内容:

您使用的是默认网络服务器吗?

WEBrick是用于启用Puppet Web服务连接的默认Web服务器,它本质上是一个参考实现,并且在大约十个受管节点之外变得不可靠.在为许多节点提供服务的任何类型的生产环境中,您应该切换到更高效的Web服务器实现,例如Passenger或Mongrel.

10个托管节点中的数字10来自哪里?

我有20多个节点,我可能很快就会超过30个.我应该改为乘客吗?

scalability puppet webrick

4
推荐指数
1
解决办法
1375
查看次数

如何重新启动用Delphi编写的Windows服务应用程序?

我有一个用Delphi编写的Windows服务.它偶尔使用的第三方资源之一会被破坏,我发现修复这种情况的唯一方法就是退出并重新启动程序.我可以检测到程序中资源何时被破坏,我可以告诉Windows在服务停止后重新启动服务,但我无法弄清楚如何让服务告诉自己停止服务.

该计划非常简单.我用似乎正常的方式创建了一个服务应用程序.我有一个TService的子类来管理服务,而所有的功能都发生在一个单独的线程中.TService子类几乎只管理子线程的执行,并且在子线程中我会检测到损坏.

作为参考,这是服务和子线程的头信息.

type
  TScannerThread = class(TThread)
   private     
    Scanner    : TScanner;
    DefaultDir : String;
    ImageDir   : String;
    procedure CheckScanner;
   public      
    Parent     : TComponent;
    procedure Execute; override;
  end;         

  TCardScanSvc   = class(TService)
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
   private        
    ScannerThread : TScannerThread;
   public         
    function GetServiceController: TServiceController; override;
  end;            

var
  CardScanSvc : TCardScanSvc;
Run Code Online (Sandbox Code Playgroud)

在GUI应用程序中,我调用Application.Terminate,但TServiceApplication似乎没有该方法.我可以终止子线程,但主线程从未注意到,Windows认为该服务仍在运行.我真的想不起其他许多尝试.

该程序最初是在Delphi 5中创建的,我目前正在使用Delphi 2007,以防万一.


编辑:

使用mghie的代码,我可以停止服务,但Windows只会在意外失败时重启服务,而不是正常停止服务.我要做的是创建一个单独的服务应用程序,如果有问题则将第一个信号作为第二个信号,然后让第二个信号重新启动第一个.

delphi winapi windows-services

2
推荐指数
1
解决办法
7851
查看次数