作为练习,我尝试创建一个隐式转换,它将接受一个函数并生成一个Runnable.这样你就可以调用接受Runnable对象的Java方法,并像封闭一样使用它们.
隐式转换很容易:
implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }
Run Code Online (Sandbox Code Playgroud)
但是我不知道怎么称呼它.如何传入一个返回Unit的无参数函数,而不是立即进行评估?例如,我想要以下内容来打印"12",而是打印"21"因为print("2")一次评估.
var savedFun : Runnable = null
def save(r : Runnable) = { savedFun = r }
save(print("2"))
print("1")
savedFun.run()
Run Code Online (Sandbox Code Playgroud)
如何告诉编译器将其print("2")视为函数的主体,而不是立即进行评估?我试过的一些可能性,比如
save(() => print("2"))
Run Code Online (Sandbox Code Playgroud)
要么
save(=> print("2"))
Run Code Online (Sandbox Code Playgroud)
不是合法的语法.
我正在尝试使用eclipse进行自动完成以进行scala开发.我正在尝试从Scala类引用一个java类,并且自动完成功能从未找到它.
例如,使用此scala类:
object Main {
def main(args: Array[String]) {
val btn = new JButton
}
}
Run Code Online (Sandbox Code Playgroud)
当我在键入JButton结束时按下ctrl + space时,autocomplete会找到"Arr","asof","case","catch","def"等...但是没有类.
在Window-> Preferences-> Java-> Editor-> Content Assist-> Advanced我选择了"Default Proposal Kinds":
Java提案,Java类型提案,SWT模板提案和模板提案.
我在Windows 7中使用Eclipse 3.5.2下的Scala 2.8.0-final插件
还有其他人遇到过这个问题吗?有解决方案吗
我正在尝试修改标准的GWT StockWatcher演示应用程序,通过websocket接收股票报价.我正在使用gwt-ws作为我的websockets实现,并且根据gwt-ws主页的说明,我已经升级了GWT的嵌入式Jetty版本.
但是,当我尝试打开websocket连接时,我得到以下405错误.有人有建议吗?
[WARN] 405 - GET /stockwatcher/webSocket (127.0.0.1) 1457 bytes
Request headers
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:8888
Origin: http://127.0.0.1:8888
Sec-WebSocket-Key: zlH08kgvDw3qHs+/OaQ9/w==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
Response headers
Content-Type: text/html;charset=ISO-8859-1
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 1457
Run Code Online (Sandbox Code Playgroud)
这是我的客户端websocket代码,从onModuleLoad()调用:
private void setupWebsocket() {
if (!JavaScriptWebSocket.IsSupported())
return;
//webSocketURL looks like "ws://127.0.0.1:8888/de_csenk_gwtws_demo/webSocket"
String webSocketURL = GWT.getModuleBaseURL().replace("http", "ws") + "webSocket";
new JavaScriptWebSocketFactory().createWebSocket(webSocketURL, new WebSocketCallback() {
public void onOpen(WebSocket webSocket) {
log("Web Socket Connection Open");
webSocket.send("Test Message");
}
public void onMessage(WebSocket webSocket, …Run Code Online (Sandbox Code Playgroud)