2016-12-08 144 views
1

我目前正在研究Rascal的稳定版本,并且我想生成Rascal网络服务器来为我的html模板提供javascript函数。 看着网络服务器模块,我看不到如何使用服务功能来使用网络服务器。它要求一个位置(我假设该位置将类似于|http://localhost:8080|),并且回调的类型为Response (Request),但该类型是什么?我不知道如何创建这种类型,究竟是什么。Rascal使用网络服务器模块

回答

2

类型

Response (Request) callback
是一个函数,例如:

 
Response (Request r) { 
    return response(...); 
} 

这个功能是一个匿名函数(它没有名字),您可以进入服务功能作为参数,你也可以把它定义为一个带有名字的正常函数,并且将该函数的名称作为参数。

所以这可能会工作:

 
serve(|http://localhost:8080|, 
      Response (Request r){ 
       return response("Hello world"); 
      }): 

既然有工厂方法

Response response(str content)
在Webserver.rsc,这将创建一个字符串参数给你一个答复。

2

在没有关于此模块的文档的情况下,您只能阅读源代码。在Eclipse浏览器中,可以访问库(用小罐子图标表示),您将在那里找到util::Webserver,其中包含ResponseRequest类型的定义。

基本上Request是一个回调函数,其中包含所有HTTP标头和东西作为参数,Response是一个包含替代响应类型(文件,字符串等)的包装。

请注意,当前版本与您使用的稳定版本有很大不同,所以在github上阅读代码并没有什么帮助。

+2

我注意到github上的实现像TutorWebserver的实现一样使用一个'''dispatchserver'',它在稳定版本中并不存在。 Webserver的源代码并没有真正说明括号后面的数据类型是一个匿名函数,这引起了我的困惑。我没有想到Rascal有匿名功能。 –

+0

啊,是的,我明白了!谢谢。 – jurgenv