如何使用 Scala.js 为 Web Worker 创建代码?查看文档,一切似乎都生成 JavaScript 函数,而不是顶级 JavaScript。新的 Worker 构造函数似乎需要顶级 Javascript,而不是文件中的函数。所以在我的 Scala.js 代码中我有:
var myWorker = new Worker("worker.js");
myWorker.onmessage = (e: scala.scalajs.js.Any) =>
{
val e1 = e.asInstanceOf[MessageEvent]
println("Worker message recieved:" -- e1.data.toString)
}
myWorker.postMessage("")
Run Code Online (Sandbox Code Playgroud)
在文件worker.js中我有
self.postMessage("from webworker");
Run Code Online (Sandbox Code Playgroud)
该消息将按预期被拾取并显示在 Web 控制台中。
CSplit和MapCanvT都是Scala Swing组件的子类型.因此,类型CanvNode始终是Component的子类型.我还没有掌握Scala系列的功能,还有像折叠一样.有没有办法减少这个代码(除了把匹配放在一个函数中)并摆脱那些匹配?
type CanvNode = Either[CSplit, MapCanvT]
class CSplit(var s1: CanvNode, var s2: CanvNode) extends SplitPane
{
topComponent = s1 match { case Left (s) => s; case Right (s) => s}
bottomComponent = s2 match { case Left (s) => s; case Right (s) => s}
Run Code Online (Sandbox Code Playgroud)
以上编译.理想情况下,我只想写:
type CanvNode = Either[CSplit, MapCanvT]
class CSplit(var s1: CanvNode, var s2: CanvNode) extends SplitPane
{
topComponent = s1
bottomComponent = s2
Run Code Online (Sandbox Code Playgroud)
但那不会编译.
我有两个问题,但我希望答案交织在一起.所以我正在玩flatMapping不同的参数类型.我得到以下内容:
val s: List[String] = List("f2", "df", "e") //> s : List[String] = List(f2, df, e)
val o = s.map(s => if (s.head == 'f')Some(s) else None)
//> o : List[Option[String]] = List(Some(f2), None, None)
val o1 = s.flatMap(s => if (s.head == 'f')Some(s) else None)
//> o1 : List[String] = List(f2)
val a: Option[String] = Some("Hello") //> a : Option[String] = Some(Hello)
val a1 = a.map(s => s.toList) //> a1 : Option[List[Char]] = Some(List(H, e, l, l, o))
Run Code Online (Sandbox Code Playgroud)
但 …
我有:
class XCClass
{
@native protected def createWin(displayPtr: Long, width: Int, height: Int, backGroundColour: Int = white.value,
borderColour: Int = darkblue.value, borderWidth: Int = 0, xPosn: Int = 0, yPosn: Int = 0): Long
@native protected def xOpen(): Long
System.load("/sdat/projects/prXCpp/Release/libprXCpp.so")
//Code edited out
class Window(width: Int, height: Int, backGroundColour: ColourInt = white, borderColour: ColourInt = darkblue,
borderWidth: Int = 0, xPosn: Int = 0, yPosn: Int = 0)
{
val xWinPtr = createWin(xServPtr, width, height, backGroundColour.value, borderColour.value, borderWidth, xPosn, yPosn) …Run Code Online (Sandbox Code Playgroud) Linux x86-64与gcc编译和静态链接我有:
#include <sys/reboot.h>
if (str[0] == 'r')
reboot(0x1234567);
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到等效函数调用shutdown.如果不同,我也想知道llvm函数.
我正确地说连接器没有进行功能参数检查.它们不检查函数调用的数量或类型,也不检查全局数据引用的类型.所有连接体都是如此吗?
我在x86-64上使用Clang瞄准Linux.链接器是否检查引用是否在正确的段中?或者就链接器而言,外部引用实际上只是一个void*?
我来自高级语言背景C#和Scala,所以对于那些沉浸在低级别世界中的人来说,这似乎是显而易见的.我在汇编程序中编写了几个函数(系统调用),我注意到汇编程序中没有外部函数的参数原型.
上下文:我实际上是在编写一个编译器.目前我的目标是使用汇编程序函数进行系统调用的预处理C .i文件,但替代方案是C++,汇编程序甚至是机器代码,所以我试图权衡成本和收益,特别是类型检查.汇编器/编译器/ 链接器我可以用来检查我自己的程序及其函数原型生成的正确性.
我似乎无法从内部类引用中获取外部类成员:
class Outer(st: Int)
{
val valOut = st
def f = 4
class Inner { val x = 5 }
}
object myObj {
val myOut = new Outer(8)
val myIn = new myOut.Inner
val myVal: Int = myIn.valOut//value f is not a member of ... myOut.Inner
val x = myIn.f//value valOut is not a member of ... myOut.Inner
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个内部包,并且在eclipse工作表中都不起作用.我在eclipse 3.7.2中使用Scala 2.10.0RC1和Scala插件2.1.0M2
Scala 如何在 f 方法字符串插值上获得类型安全。StringContext.f 方法采用 Any 的参数。那么它如何判断是否需要 Int、Double 等:
def f(args: Any*): 字符串
在方法内部的import语句纯粹是一个编译时构造,与在类外部声明的import语句相同吗?从阅读其他问题我相当肯定它只是一个编译时间构造,但经验告诉我要警惕那些我不是100%肯定的事情.此外,我正在阅读一篇文章,我再也找不到了这篇文章.所以特别是当我在运行时加载类时,我想确保在方法/类中没有带有import语句的微妙问题.
所以我有一个网络工作者:
package pWorker
import scala.scalajs.js._
import org.scalajs.dom._
object WorkScript extends scala.scalajs.js.JSApp
{
def main(): Unit =
{
val x = 4
val y = 8
val z = x + y
println("Worker x + y =" -- z.toString)
}
}
Run Code Online (Sandbox Code Playgroud)
从主JavaScript线程启动时,worker会根据需要打印到控制台.但我无法找到一种方法来称呼相应的:
self.addEventListener('message', function(e) {}
self.postMessage(e.data);
Run Code Online (Sandbox Code Playgroud)
我会从一个直接的Javascript文件调用.