问题列表 - 第40735页

使用ets:foldl作为每个记录上的穷人forEach

简短版本: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)

erlang foreach ets

5
推荐指数
1
解决办法
3219
查看次数

共享OpenGL资源的策略

我正在创建一个类似CAD的应用程序(基于Qt),它将是一个多文档界面,每个文档将包含大约5个视口(从QGLWidget派生).因此,我需要在整个应用程序中共享我的平面着色器,然后在每个文档(即5个视口)之间共享3D资源(存储为VBO的模型).

我想只要我在着色器程序和VBO GLuint地址共享所有将自动工作 - 它没有.我想因为每个视口/上下文在显卡上都有自己的地址空间,如果有人知道更好请告知!

我想在应用程序启动时编译着​​色器,但这很难实现,因为我需要一个有效的QGLWidget来预先将​​OpenGL置于有效状态.但是,由于我需要共享QGLWidgets(通过它们的构造函数)以使它们共享资源,因此需要先创建并显示其他资源,然后才能实例化其他资源.但这是非常不切实际的,因为多个视图一次显示给用户.

这一定比我说的要容易,因为它不是突破性的东西,但我真的很挣扎 - 有人能指出我正确的方向吗?

谢谢,Cam

opengl qt vbo qglwidget

6
推荐指数
1
解决办法
2230
查看次数

如何基于类型字符串在javascript中创建新对象?

如何基于变量类型字符串(包含对象的名称)在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)

我想得到(不断增长的)开关声明,似乎'错了'.

javascript dynamic

10
推荐指数
2
解决办法
7807
查看次数

产生过程,但一次只有5个

我正在使用文件名工作.每个文件都必须由外部二进制文件处理.这工作正常,但它一次只处理一个文件.是否有可能两个并行产生多个进程?

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来进行一些数据库更新.

c# asynchronous process console-application

6
推荐指数
1
解决办法
1849
查看次数

有没有更好的方法来编写这个功能?

我有以下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)

似乎我写的函数可能有点冗长.是否有更简洁的方式来编写它?

list common-lisp

0
推荐指数
1
解决办法
91
查看次数

什么应该",7-6-5-4-3-2-1".分裂(',')回归?

应该",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)获得所需的行为

string split scala scala-2.8

6
推荐指数
2
解决办法
510
查看次数

SqlAlchemy上一个/下一个访问者?

有没有办法从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)

pylons sqlalchemy

6
推荐指数
1
解决办法
1207
查看次数

在nodeJS中使用require的固定根相对访问模块

我正在尝试访问模块,但嵌套有点失控

require("../../../Folder/Deeper/someFile")

无论如何只是使用 require("Folder/Deeper/somefile")

我试过设定

require.paths = ['/media/work/Project'];

但这似乎不起作用,对我来说也有点难看.

有没有其他选择.有没有办法为此编写包装器?

javascript require node.js

5
推荐指数
1
解决办法
1487
查看次数

MySQL:无法在Upper Camel Case(Pascal Case)中为表命名

我读到最好在Pascal Case(ThisIsMyTableName)中使用表名.因此我想在MySQL中更改我的表格.但是phpmyadmin和SQL的SQL Manager 2005都不会让我这么做.名称保持小写,好像我根本没有改变.

有什么建议可以解决这个问题?

mysql camelcasing pascalcasing naming-conventions

4
推荐指数
2
解决办法
1万
查看次数

Ruby操作符方法调用与普通方法调用

我想知道为什么调用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

ruby methods syntax

12
推荐指数
2
解决办法
3472
查看次数