注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

scala access the Scala repl over websockets  

2013-10-11 23:39:32|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参见:access the Scala repl over websockets
package
ch.epfl.lamp.replhtml

import unfiltered.netty.websockets._
import scala.util.matching.Regex

object ReplMain {
  def main(args: Array[String]) {
    val sockets = collection.mutable.ListBuffer.empty[WebSocket]
    // TODO: WebSocketServer is deprecated in unfiltered 0.6.8
    WebSocketServer("/socket/repl", 8080) {
      case Open(s) => sockets += s
      case Message(s, Text(str)) => println(s"message: $str")
        val resp = interpret(str); println(s"Response: $resp")
        sockets foreach (_.send(resp))
      case Close(s) => sockets -= s
      case Error(s, e) => println(s"error ${e.getMessage}")
    } run ()
  }

  import scala.tools.nsc._
  import scala.tools.nsc.interpreter._

  val cmd = new CommandLine(Nil, println)
  import cmd.settings
  settings.classpath.value = System.getProperty("replhtml.class.path")

  val interpreter = new IMain(settings)
  val completion = new JLineCompletion(interpreter)
  // interpreter.bind("servlet", "ch.epfl.lamp.replhtml.ReplServlet", ReplServlet.this) }
  // interpreter.unleash()

  def interpret(data: String): String = {
    // TODO: use json
    implicit class RContext(sc: StringContext) {
      def rx = new Regex(sc.parts.mkString(""), sc.parts.tail.map(_ => "x"): _*)
    }
    object I { def unapply(x: String): Option[Int] = scala.util.Try { x.toInt } toOption }
    data.split(":", 2) match {
      case Array(rx"""complete@(\d*)${I(pos)}""", source) =>
        "<completion>:" + pos + "\n" + {
          lazy val tokens = source.substring(0, pos).split("""[\ \,\;\(\)\{\}]""") // could tokenize on client
          if (pos <= source.length && tokens.nonEmpty)
            completion.topLevelFor(Parsed.dotted(tokens.last, pos) withVerbosity 4).mkString("\n")
          else ""
        }

      case Array("run", source) =>
        util.stringFromStream { ostream =>
          Console.withOut(ostream) {
            interpreter.interpret(source) match {
              case IR.Error => println("<done:error>")
              case IR.Success => println("<done:success>")
              case IR.Incomplete => println("<done:incomplete>")
            }
          }
        }
    }
  }
}
/*******************************************************************************************
$ scala 
Welcome to Scala 2.10.1 yadayada
implicit class RContext(sc: StringContext) {
  def rx = 
    new util.matching.Regex(
        sc.parts.mkString(""), 
       sc.parts.tail.map(_ => "x"): _*)
}
object I { def unapply(x: String): Option[Int] = scala.util.Try { x.toInt } toOption }
scala> "one2" match { case rx"""one(\d*)${I(d)}""" => println(d + 1) }
3
*******************************************************************************************
/

  评论这张
 
阅读(526)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017