我有两个集合,一个(A)包含要处理的项目(相对较小),一个(B)包含已经处理的项目(相当大,有额外的结果字段).
项目从A读取,得到处理并保存()'d到B,然后从A中删除()'d .
理由是指数可以在这些指数之间有所不同,并且"传入"集合可以通过这种方式保持非常小和快.
我遇到了两个问题:
我可以回避使用findAndModify锁的双失败案例(否则不需要,我们有一个进程级锁)但是我们有过时的锁问题,部分失败仍然可能发生.据我所知,没有办法原子地删除+保存到不同的集合(可能是设计?)
这种情况有最佳实践吗?
以下代码:
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use 5.012; # implicitly turn on feature unicode_strings
my $test = "some string";
$test =~ m/.+\x{2013}/x;
Run Code Online (Sandbox Code Playgroud)
产量:
在test.pl第9行的
$test模式匹配(m//)中使用未初始化的值.
这似乎发生在内部的任何2字节字符\x{}.以下正则表达式正常:
/a+\x{2013}/
/.*\x{2013}/
/.+\x{20}/
Run Code Online (Sandbox Code Playgroud)
此外,错误消失了use bytes,但不鼓励使用该编译指示.这里发生了什么?
有时,当页面的其余部分呈现时,Chrome 会使用不正确的颜色绘制特定的 div 一两秒。然后颜色(非常明显)变为正确的值。
如果我足够早地停止加载(按 Esc),我可以得到不正确的颜色,但检查器谎报其十六进制值,而是显示 css 中的(正确的)十六进制颜色。系统ColorPicker显示实际值。这种颜色似乎没有在源中的任何地方被引用。
这是在 OS X 上的 Chrome 22.0.1229.79 beta 中,带有外部显示器(不清楚在没有外部显示器的情况下是否可以重现)。我知道与第 3 方显示器相关的配置文件会极大地影响颜色表示,但十六进制值应该保持不变,不是吗?

将预编译的正则表达式放在列表中引用的两个不同哈希中:
my @list = ();
my $regex = qr/ABC/;
push @list, { 'one' => $regex };
push @list, { 'two' => $regex };
use Data::Dumper;
print Dumper(\@list);
Run Code Online (Sandbox Code Playgroud)
我期待:
$VAR1 = [
{
'one' => qr/(?-xism:ABC)/
},
{
'two' => qr/(?-xism:ABC)/
}
];
Run Code Online (Sandbox Code Playgroud)
但相反,我们得到一个循环引用:
$VAR1 = [
{
'one' => qr/(?-xism:ABC)/
},
{
'two' => $VAR1->[0]{'one'}
}
];
Run Code Online (Sandbox Code Playgroud)
这将发生在无限期嵌套的哈希引用和浅层复制$regex.
我假设基本原因是预编译的正则表达式实际上是引用,并且同一列表结构中的引用被压缩为优化(\ $标量行为相同).我没有完全看到这样做的效用(可能是对引用的引用具有相同的内存占用),但也许基于内部表示的原因
这是正确的行为吗?我可以阻止它发生吗?除了可能使GC更加困难之外,这些圆形结构会产生非常严重的问题.例如,迭代有时可能包含相同正则表达式的查询列表会使MongoDB驱动程序崩溃并发生令人讨厌的段错误(请参阅https://rt.cpan.org/Public/Bug/Display.html?id=58500)
我正在尝试使用npm安装github项目的fork(在master而不是任何特定的提交上,因为我想针对它进行开发):
% npm install parkan/graffiti-mongoose
@risingstack/graffiti-mongoose@2.0.0 node_modules/@risingstack/graffiti-mongoose
Run Code Online (Sandbox Code Playgroud)
这似乎是查找父存储库,并在我的gh上相对于master安装它的版本,到目前为止一切正常。请注意,该程序包使用有范围的程序包名称语义,我认为这是问题的一部分。
% npm list |grep mongoose
??? @risingstack/graffiti-mongoose@2.0.0 (git://github.com/parkan/graffiti-mongoose.git#01a8480fa7d787a4d74bf3bcb257d01b4d73129a)
% ls node_modules/@risingstack/graffiti-mongoose
CHANGELOG.md LICENSE fixture
CONTRIBUTING.md README.md package.json
Run Code Online (Sandbox Code Playgroud)
但是,我无法以任何明显的方式来导入节点或要求它:
> require('graffiti-mongoose');
Error: Cannot find module 'graffiti-mongoose'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:286:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at repl:3:1
at Object.exports.runInThisContext (vm.js:54:17)
at _eval (/usr/local/lib/node_modules/babel/lib/_babel-node.js:86:26)
at REPLServer.replEval (/usr/local/lib/node_modules/babel/lib/_babel-node.js:169:14)
at bound (domain.js:250:14)
at REPLServer.runBound [as eval] (domain.js:263:12)
> require('@risingstack/graffiti-mongoose');
Error: Cannot find module '@risingstack/graffiti-mongoose'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:286:25)
at …Run Code Online (Sandbox Code Playgroud) 假设我有一些可能有重叠域的部分函数:
val funcs: Seq[PartialFunction[Any, Int]] = Vector(
{ case i: Int if i % 2 == 0 => i*2 }
,
{ case i: Int if i % 2 == 1 => i*3 }
,
{ case i: Int if i % 6 == 0 => i*5 }
)
Run Code Online (Sandbox Code Playgroud)
我想将它们应用于一个值,并收集该val定义的任何结果.我认为有一种优雅的方式可以collect用于此,但我能做的最好的方法是
val num = 66
funcs.collect { case func if func.isDefinedAt(num) => func(num) }
// or
funcs.filter(_.isDefinedAt(num)).map(_(num))
Run Code Online (Sandbox Code Playgroud)
这看起来不干净.有没有办法使用内置案例机制来测试定义和同时评估,可能是通过将它们与测试值或类似的东西进行对比?