val eventListeners = new HashMap[Class[Event], ArrayBuffer[Event => Unit]]
def addEventListener[A <: Event](f: A => Unit)(implicit mf: ClassManifest[A]): A => Unit = {
eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
f
}
Run Code Online (Sandbox Code Playgroud)
投掷:
error: type mismatch;
found : (A) => Unit
required: (this.Event) => Unit
eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
Run Code Online (Sandbox Code Playgroud)
为什么说它找到了(A) => Unit?值f是一个函数(Event) => Unit.不A只是一个类型参数,而不是签名?
示例电话:
addEventListener { e:FooEvent => .... }
这个问题涉及Ruby on Rails和PHP.在为Web应用程序寻找VPS主机时(还没有确定要编写它的两种语言中的哪一种),我应该考虑更多什么?内存还是CPU?我知道你需要两者的公平平衡,但我会先遇到哪一面?
我确定这取决于应用程序正在进行的工作类型,在我的情况下它是正常的CRUD.我的猜测是记忆,但我想确定一下.
我正在学习C#异步套接字编程,并且我已经了解到在某种池中重用字节缓冲区是个好主意,然后在从套接字接收数据时根据需要检查一个.
但是,我已经看到了两种不同的字节数组池方法:一种是使用简单的队列系统,只是根据需要在队列中添加/删除它们.如果请求了一个并且队列中没有剩余,则会创建一个新的字节数组.
我见过的另一种方法是为整个程序使用一个大字节数组.队列的概念仍然适用,但它是一个整数队列,它确定要使用的字节数组的片(偏移量).如果请求了一个并且队列中没有剩余,则必须调整阵列的大小.
对于高度可扩展的服务器,哪一个是更好的解决方案?我的直觉是,使用多个字节数组会更便宜,因为我想要根据需要调整数组大小(即使我们在大块中分配它)也会非常昂贵,特别是当它变大时.使用多个阵列似乎也更直观 - 使用一个我没想到的大型阵列有一些优势吗?
我不明白这里有什么问题,但我可能会误解语法.我正在尝试从我的"用户"mnesia表中删除一个名为"ryan"的"用户"记录(其中有多个).这是我做的:
Delete=#user{first_name = "ryan", _ = '_'},
mnesia:dirty_delete_object(Delete)
Run Code Online (Sandbox Code Playgroud)
这是我的记录定义:
-record(user, {id,
username,
password,
email,
first_name,
last_name,
last_login, % Date/time user last logged in
reg_date}). % Date/time user registered the account
Run Code Online (Sandbox Code Playgroud)
这是我得到的例外:
** exception exit: {aborted,
{bad_type,user,
{user,'_','_','_','_',"ryan",'_','_','_'}}}
in function mnesia:abort/1
in call from users:register/1
Run Code Online (Sandbox Code Playgroud)
这似乎是一场完美的比赛.什么可能导致这个问题?
首先,原谅我的hacky代码,我只是想尝试一下,我第一次学习javascript.基本上,给定字符串"abc!random {3}"将意味着返回以"abc"开头并以0-3开始的随机数结束的字符串.
这是我有的:
var pattern=/!random{([^{]*?)}/gi;
var text="abc!random{3}def!random{4}ghi!random{!random{3}}";
while (pattern.test(text))
{
text=text.replace(pattern, Math.random() * parseInt("$1"));
}
Run Code Online (Sandbox Code Playgroud)
问题是parseInt函数.似乎1美元没有传递给它......它的价值被清除或者其他东西.如果我做:
text=text.replace(pattern, "$1");
Run Code Online (Sandbox Code Playgroud)
它正确地返回{}之间的内容,因此正则表达式正在工作,匹配存储在$ 1中.但是,只要我将它用作$ 1的参数,它的值似乎就被清除了.是什么赋予了?
我正在尝试对每个条目具有多个值的关联数组进行排序.
例如
[0] => stdClass Object ( [type] => node [sid] => 158 [score] => 0.059600525242489 )
[1] => stdClass Object ( [type] => node [sid] => 247 [score] => 0.059600525242489 )
Run Code Online (Sandbox Code Playgroud)
我希望数组按'得分'排序(最高得分是第一个索引)
我该怎么做?
在过去7年的大部分时间里,我一直在进行面向对象编程,在此期间使用Java打开和关闭.有些事情我确信我有很好的把握,比如最有用的设计模式.实际上,下面的代码允许我在一天的时间内创建一个小系统,它将处理我们现在准备实现的一个特定实例,同时具有足够的灵活性来处理我已经被告知的未来需求:
public void importAndArchive(File detectedFile) throws FileNotFoundException, IOException {
File workingCopy = returnWorkingCopy(detectedFile);
List<String[]> csvData = csvData(workingCopy);
setHeaderFields(csvData.get(0));
importData(csvData); //subclass will implement this abstract method
archiveWorkingCopy(workingCopy);
}
Run Code Online (Sandbox Code Playgroud)
我没有表现出上面的夸耀我对模板方法的掌握,而是作为一个起点来讨论我的能力中的差距,这是我的OO设计能力的明显.这种差距是异常处理的系统方法.事实上你可以在那个方法签名中看到我暂时重新抛出一些异常,但实际上我已经在应用程序的另一个角落里根除了同样的东西.
在我走得更远之前,由于这是我第一次特别系统化的尝试,我想对我到目前为止所做的事情进行一些验证.我们的应用程序循环遍历一堆文件,"处理"它们并"归档"它们.非常标准的票价.我为了尽快推出原型而做出的一个决定如下.应用程序根据(ResourceBundled)属性文件中的数据进行初始化.ResourceBundle API中的各种方法抛出未经检查的异常,但我暂时并没有真正处理它们,理由是它们会阻止应用程序启动,并且堆栈跟踪暂时就足够了.
但是我选择了一个用于CSV处理的库,它会抛出已检查的异常.然后,NetBeans很容易将这些异常扩散开始;)以下是我重新编写的一个实际处理这些异常的方法:
private String detectImportHandler(File detectedFile) throws Exception {
String[] firstLine = null;
try {
/*
* CSVReader throws checked exceptions
*/
CSVReader csvReader = new CSVReader(new FileReader(detectedFile));
firstLine = csvReader.readNext();
csvReader.close();
}
catch(Exception x) {
throw new Exception("CSVReader unable to process file: " + x.getMessage());
}
try {
return firstLine[1]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过查看示例应用程序来更好地学习Rails,并且在查看railscasts.com源代码的这一行时,我注意到它是这样做的:
<div class="episodes">
<%= render @episodes %>
</div>
Run Code Online (Sandbox Code Playgroud)
到底发生了什么?为什么渲染函数没有记录?或者是吗?
> map (++ "!") ["a", "b", "c"]
["a!","b!","c!"]
> (++) "!" "a"
"!a"
Run Code Online (Sandbox Code Playgroud)
这两行对我来说没有意义.使用++时map,似乎第一个参数被附加到第二个参数,但在第二个列表中,它是另一种方式.Haskell如何推理map函数中的行为?