我在mnesia中有一个表,我需要更新其中的记录中的各个字段.根据Erlang:Mnesia:如果我执行以下操作,则连续更新单个字段值:
update_a(Tab, Key, Value) ->
fun() ->
[P] = mnesia:wread({Tab, Key}),
mnesia:write(Tab, P#rec{a=Value}, write)
end.
Run Code Online (Sandbox Code Playgroud)
根据我的理解,上面的代码读取P基于a的记录Key,获取记录上的写锁定,以便在读取和写回(或简称,更新)时,没有其他事务修改此记录.到现在为止还挺好.
现在我的要求是我需要能够根据Key表中的另一个字段读取记录,然后对其执行更新.这个查找的功能是mnesia:match_object.现在的问题是,根据http://www.erlang.org/doc/man/mnesia.html#match_object-3,该函数仅支持读锁,而不支持写锁.
这样做的结果是,假设在上面的函数中我使用的是mnesia:match_object,我将获得一组(一组)记录,所有记录都带有读锁.在我读取记录之后,我需要对检索到的数据执行一些检查,然后仅在条件满足时写回更新的记录.现在,假设有两个并行事务T1和T2由两个不同的源运行启动.T1和T2都同时访问相同的记录.由于它们被读锁定,因此T1和T2都能够并行读取记录.T1和T2都将对同一记录执行相同的检查,如果条件匹配,则两者都将继续执行更新.但是,在我的代码中,如果T1和T2已经连续执行,T1将对记录进行更改,在T2中,它将读取这些已更改的记录,并且条件将失败并且不会进行更新.
简而言之,我需要编写由mnesia:match_object返回的锁记录.文档明确指出只支持读锁定.有没有其他选择?
更新: 我一直在尝试一点,我认为可能的解决方案是使用复合键.假设我将数据写入表中,如:
mnesia:transaction(fun() -> mnesia:write(mytable, #rec{i={1,2}, a=2, b=3}, write) end).
Run Code Online (Sandbox Code Playgroud)
有没有办法查找条目,使用不关心?
我尝试了这些,但都返回了空结果:
mnesia:transaction(fun()-> mnesia:read(mytable, {1,'_'}, read) end).
mnesia:transaction(fun()-> mnesia:read(mytable, {1,_}, read) end).
Run Code Online (Sandbox Code Playgroud) 我得到了要求,我使用POI创建Excel工作表.在excel中我有第一行和第二行,每行包含三个不同值的单元格,如第二行包含相同.
如何将r0c0 + r1c0 + r2c0值添加到另一个单元格中.
是否有任何API.
如果遇到任何问题,请帮助我.
虽然我一直在努力保持WinForms应用程序,我正在努力简单易学,我正在工作的(金融)功能领域非常丰富,我觉得我应该帮助用户弄清楚要做什么一旦程序启动,请执行下一步.
我必须在我正在处理的软件中添加它,通常是"下一步要做的事情"(即验证某些内容,回复消息等)
在过去的几天里,我一直在考虑这个问题,我觉得在这个领域已经尝试了很多东西:
Clippy(RIP).
的?右上角的按钮(又名"这是什么"按钮),用户已经学会忽略点击"retro-transponder amplitude" ?可能会带来一个有用的"复古转发器振幅"工具提示,这不值得鼠标前往右上角.
这有几个变化?按钮,包括状态栏中的上下文帮助区域(指鼠标当前悬停的东西),解决了必须点击"?"的问题,但仍然不让用户抓住整个界面一目了然.编辑:Joe建议的上下文帮助窗口就是另一个例子.
帮助文件是有帮助的(只要它们写得很好),但它们缺乏"即时反馈"的东西 - 恰恰是Clippy试图解决的问题
"一天的提示"通常是视线拍摄(通常比一些用户甚至没有时间发现"启动时显示当天的提示"勾选复选框的速度快)
我正在考虑的是使用覆盖帮助屏幕,即点击"F1"会在屏幕上弹出很多叠加工具提示,说明所有内容,可能是红色工具提示(而不是黄色)用于推荐的下一个操作.释放F1(或可能再次击中它)会隐藏所有帮助杂乱
这将解决我提到的四种方法的问题:
帮助只是按需弹出(vs clippy)
你不必点击?那么屏幕上的每个标签(vs ?按钮)
您不必花时间在帮助文件中搜索相关信息.文档就在您的指尖(vs .chm帮助文件)
有用的提示会在相关时间显示(即,在显示时会显示有关对话框foo的提示,而不是在程序启动时 - 当您可能不知道foo对话框的外观时)
在某些软件中已经尝试过这个吗?你认为这是个好主意吗?你有其他想法来解决我的问题吗?
免责声明:请不要回答"你应该解决你的真正问题,那就是你的UI过于复杂".请假设已完成所有操作以保持UI简单.
想想一架客机驾驶舱.努力进入了用户界面,但它仍然非常复杂.现在想象普通用户应该能够使用它:你将如何解决这个问题?这正是我的问题.
我将用c ++构建一个创建照片流的应用程序,然后将它们作为视频流发送到另一个应用程序.关于我该如何开始的任何想法?我的意思是,我应该使用哪些库以及编码是什么?我正在考虑MJPEG,UDP或RTP作为协议....任何帮助将不胜感激.
我正在使用带有Mako模板的Pylons,我想避免一直打字:
${ h.some_function_that_outputs_html() | n }
Run Code Online (Sandbox Code Playgroud)
我想以某种方式标记函数,或者将变量标记为安全(您可以在Django中执行此操作),因此我不必一直使用pipe-en.有任何想法吗?
我在D:\ ColdFusion8安装了coldfusion 8 .
有两个文件 D:\ ColdFusion8\wwwroot\page1.cfm 和 D:\ ColdFusion8\wwwroot\page2.cfm.
现在的问题是,如果没有application.cfm或的Application.cfc在d:\ ColdFusion8\wwwroot的,应当d:\ ColdFusion8\wwwroot的\ page1.cfm和d:\ ColdFusion8\wwwroot的\ page2.cfm被视为相同申请与否?
想象一下:
class A(object):
class B(object):
def __init__(self):
super(B, self).__init__()
Run Code Online (Sandbox Code Playgroud)
这会产生错误:
NameError: global name B is not defined.
我试过了A.B,但后来说它A没有定义.
更新:
我发现了这个问题.
我有一个这样的课:
class A(object):
class B(object):
def __init__(self):
super(B, self).__init__()
someattribute = B()
Run Code Online (Sandbox Code Playgroud)
在该范围内,A尚未定义.
我最近有足够的时间对"CSS hacks"和"Conditional Comments"这个论点进行过充分的讨论,我认为我会把这个问题抛给Stack Overflow社区.
<!--[if IE]>
<link type="text/css" rel="stylesheet" href="ie-specific.css" />
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
反对使用IE条件注释的主要论点似乎是您在每个页面加载上添加了额外的HTTP请求,从而减慢了页面的显示速度.我无法找到的任何实际指标都证明或反驳了这一说法.
撇开维护多个样式表与一个样式表的论点(尽管这本身就是一个有效的讨论),有没有人在这里做任何测试来确定使用条件注释给你带来的减速程度,或者能够指出我对任何其他人收集的任何统计数据的方向?