简短版本:ets:foldl当一个人正在迭代它们时,是否可以安全地删除每个ETS记录?
假设一个ETS表正在累积信息,现在是时候处理它了.从表中读取记录,以某种方式使用,然后删除.(另外,假设表是private,所以没有并发问题.)
在另一种语言中,使用类似的数据结构,您可以使用for ... each循环,处理每个记录,然后从hash/dict/map /中删除它.但是,该ets模块没有foreach例如lists.
但这可能有效:
1> ets:new(ex, [named_table]).
ex
2> ets:insert(ex, {alice, "high"}).
true
3> ets:insert(ex, {bob, "medium"}).
true
4> ets:insert(ex, {charlie, "low"}).
true
5> ets:foldl(fun({Name, Adjective}, DontCare) ->
io:format("~p has a ~p opinion of you~n", [Name, Adjective]),
ets:delete(ex, Name),
DontCare
end, notused, ex).
bob has a "medium" opinion of you
alice has a "high" opinion of you
charlie has a "low" opinion of you
notused
6> ets:info(ex). …Run Code Online (Sandbox Code Playgroud) 我正在创建一个类似CAD的应用程序(基于Qt),它将是一个多文档界面,每个文档将包含大约5个视口(从QGLWidget派生).因此,我需要在整个应用程序中共享我的平面着色器,然后在每个文档(即5个视口)之间共享3D资源(存储为VBO的模型).
我想只要我在着色器程序和VBO GLuint地址共享所有将自动工作 - 它没有.我想因为每个视口/上下文在显卡上都有自己的地址空间,如果有人知道更好请告知!
我想在应用程序启动时编译着色器,但这很难实现,因为我需要一个有效的QGLWidget来预先将OpenGL置于有效状态.但是,由于我需要共享QGLWidgets(通过它们的构造函数)以使它们共享资源,因此需要先创建并显示其他资源,然后才能实例化其他资源.但这是非常不切实际的,因为多个视图一次显示给用户.
这一定比我说的要容易,因为它不是突破性的东西,但我真的很挣扎 - 有人能指出我正确的方向吗?
谢谢,Cam
如何基于变量类型字符串(包含对象的名称)在javascript中创建新对象?
现在我有:(随着更多工具的到来,列表会变得更长......)
function getTool(name){
switch(name){
case "SelectTool":
return new SelectTool();
break;
case "LineTool":
return new LineTool();
break;
case "BlurTool":
return new BlurTool();
break;
case "PointerTool":
default:
return new PointerTool();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
并定义了我的工具:
PointerTool.prototype = new Tool;
PointerTool.prototype.constructor = PointerTool;
function PointerTool(){
this.name = "PointerTool";
}
PointerTool.prototype.click = function(x, y){
info("You clicked at: "+x+", "+y);
}
Run Code Online (Sandbox Code Playgroud)
我想得到(不断增长的)开关声明,似乎'错了'.
我正在使用文件名工作.每个文件都必须由外部二进制文件处理.这工作正常,但它一次只处理一个文件.是否有可能两个并行产生多个进程?
Queue<string> queue = new Queue<string>();
queue.Enqueue("1.mp3");
queue.Enqueue("2.mp3");
queue.Enqueue("3.mp3");
...
queue.Enqueue("10000.mp3");
while (queue.Count > 0)
{
string file = queue.Dequeue();
Process p = new Process();
p.StartInfo.FileName = @"binary.exe";
p.StartInfo.Arguments = file;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
更新:我喜欢Alex LE的解决方案(Spawn进程,但一次只有5个),但是可以按照Ben Voigt的建议等待子进程退出吗?
编辑1:我需要检查p.ExitCode == 0来进行一些数据库更新.
我有以下Common Lisp函数:
(defun get-positions (marker)
(let ((result nil))
(dotimes (i (length board))
(if (eq (nth i board) marker)
(push i result)))
(nreverse result)))
Run Code Online (Sandbox Code Playgroud)
这是什么board,这是函数的输出:
CL-USER> board
(X X O NIL NIL NIL NIL NIL NIL)
CL-USER> (get-positions 'x)
(0 1)
Run Code Online (Sandbox Code Playgroud)
似乎我写的函数可能有点冗长.是否有更简洁的方式来编写它?
应该",7-6-5-4-3-2-1,".split(',')返回什么?
它似乎回归了
blank string
7-6-5-4-3-2-1
Run Code Online (Sandbox Code Playgroud)
即.两个字符串.我期待一个或三个字符串 - 两端都是空字符串,或者只是','之间的字符串.
我错了吗?目前的行为有一个很好的解释吗?
编辑:
好.所以是的,我有错误的期望,不,除了Java这样的方式之外没有其他好的解释:).谢谢.
EDIT2:
您可以使用split(",", -1)
(Scala 2.8.1)获得所需的行为
有没有办法从SqlAlchemy查询中获取prev/next记录?像这样:
record.id
record.next.id
record.prev.id
Run Code Online (Sandbox Code Playgroud)
我可以自己为每个模型添加prev/next方法,但我想知道是否已经有一些我忽略的自动方式.有问题的Web应用程序是用Pylons编写的.
编辑: 这可能是一个肮脏的黑客,但它的工作原理.我将sqlalchemy Session对象导入到我的模型中并执行了以下操作:
def next(self):
return Session.query(Blog).filter(Blog.id > self.id).order_by(Blog.id).first()
def prev(self):
return Session.query(Blog).filter(Blog.id < self.id).order_by(desc(Blog.id)).first()
Run Code Online (Sandbox Code Playgroud) 我正在尝试访问模块,但嵌套有点失控
require("../../../Folder/Deeper/someFile")
无论如何只是使用 require("Folder/Deeper/somefile")
我试过设定
require.paths = ['/media/work/Project'];
但这似乎不起作用,对我来说也有点难看.
有没有其他选择.有没有办法为此编写包装器?
我读到最好在Pascal Case(ThisIsMyTableName)中使用表名.因此我想在MySQL中更改我的表格.但是phpmyadmin和SQL的SQL Manager 2005都不会让我这么做.名称保持小写,好像我根本没有改变.
有什么建议可以解决这个问题?
我想知道为什么调用operator方法不需要点?或者更确切地说,为什么不能在没有点的情况下调用普通方法?
例
class Foo
def +(object)
puts "this will work"
end
def plus(object)
puts "this won't"
end
end
f = Foo.new
f + "anything" # "this will work"
f plus "anything" # NoMethodError: undefined method `plus' for main:Object
javascript ×2
asynchronous ×1
c# ×1
camelcasing ×1
common-lisp ×1
dynamic ×1
erlang ×1
ets ×1
foreach ×1
list ×1
methods ×1
mysql ×1
node.js ×1
opengl ×1
pascalcasing ×1
process ×1
pylons ×1
qglwidget ×1
qt ×1
require ×1
ruby ×1
scala ×1
scala-2.8 ×1
split ×1
sqlalchemy ×1
string ×1
syntax ×1
vbo ×1