我有一个代表工作阶段的有限状态机。我需要在 Postgres 数据库中表示状态。我想通过禁止从一种状态更新到另一种状态来强制代码正确性,除非状态机允许这样做。
实现我的目标的一种天真的方法可能是获取表上的排他锁,在事务中检查当前状态和下一个状态,在无效更新的情况下因错误而中止。
这显然是一个性能杀手,因为我将在每次状态转换时锁定Job表。
有没有办法通过约束来实现相同的目标?
Perl使获得一些符号变得非常方便.
$ perl -CO -E 'say "\N{FAMILY}"'
Run Code Online (Sandbox Code Playgroud)
有没有办法"\N{}"通过插值来评估符号?类似的东西:
perl -CO -E 'my $what = "FAMILY"; say "\N{$what}"'
Run Code Online (Sandbox Code Playgroud)
(这不起作用,但给你的味道).
除可行性外,这种评估还有任何缺点或可能的威胁吗?例如,说$what字符串是用户定义的,我永远不会eval $what.我会\N{$what}安全吗?
得到答案后,我注意到这些信息是如何明确说明的perlunicook.抱歉缺少RTFM.我想无论如何这对stackoverflow来说是件好事.
我需要将Gradle用于我的Java项目.我跑了一些单元测试./gradlew test,但异常堆栈跟踪是在威腾的网页,我需要在浏览器中加载.
为什么这么复杂?
有没有办法让它在终端上取而代之,就像我Maven那样?
有很多的问题,关于Java字符串不变性,对于这实际上这个问题的作者重新分配的参考.
然而,有一个显着的案例,似乎没有重新分配字符串:
String s = "hello";
s += " world";
Run Code Online (Sandbox Code Playgroud)
您将其视为字符串的实际修改.在家尝试一下.
我很确定这是一种语法糖,并由编译器翻译成具有相同语义的东西:
String s = "hello";
s = s + " world";
Run Code Online (Sandbox Code Playgroud)
有人可以证实这个事实吗?
我有两个数据集,指的是以两种不同的方式执行的相同过程.相对于实时执行A速度比执行慢B,但这两个图表代表相同的现象.
我可以将两者一起绘制如下:
plot 'A' using 1:2, 'B' using 1:2
Run Code Online (Sandbox Code Playgroud)
但是我获得了两个具有不同X刻度A的图形:速度较慢,因此图形很多.
我可以通过执行以下操作来规范化图表:
plot 'A' using ($1 / maxA):2, 'B' using ($1 / maxB):2
Run Code Online (Sandbox Code Playgroud)
哪个适合我.唯一的问题是maxA和maxB变量.它们很容易确定(tail -n1 A | cut -f1和tail -n1 B | cut -f1分别),但我想知道是否有自动化的方法.
提前感谢任何回答.
在我应用了Wrzlprmft的优秀答案之后,我终于得到了以下模式,这非常方便:
max(Source) = system('tail -n ' . Source . '| cut -f1')
A = 'path/to/A'
maxA = max(A)
plot A using ($1 / maxA):2
Run Code Online (Sandbox Code Playgroud)
另一个可能的改进可能是包含函数的Column参数 …
除了经典的函数调用
sub foo { ... };
foo 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)
Perl允许定义闭包
my $foo = sub { ... };
$foo->(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,词汇本地)
即使我找不到它的非hackish目的,Perl也允许这样做:
*main::foo = sub { ... }
Run Code Online (Sandbox Code Playgroud)
它获得与第一种形式几乎相同的效果,除了我必须在参数周围加上括号:
foo(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
如果我没有括号,我会收到以下错误:
Number found where operator expected at - line 6, near "&main::foo 1"
(Missing operator before 1?)
syntax error at - line 6, near "main::foo 1"
Execution of - aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
...如果我用&foo 1, 2, 3语法调用它,也会发生这种情况,并明确表示它是关于函数的.
所以我的问题是:
为什么括号可以在第一种形式中省略,而不是在第三种形式中省略?
第三种形式有目的吗?在我看来,在一个包的命名空间中注入一个回调是一种不好的做法,因为它会使事情变得隐含且无法检测到.
谢谢你的回答.
该File::ShareDir::Install模块代表了一种使用 Perl 发行版/模块携带辅助文件的实用方法。然而,我对如何将它包含在我的项目的依赖项中感到有些困惑。
我试图在一台新机器上安装我的包(实际上是一个带有基本 OS + Perl + CPAN 的 docker 容器),但出现错误:
Can't locate File/ShareDir/Install.pm in @INC ... at Makefile.PL line 7.
Run Code Online (Sandbox Code Playgroud)
根据文档 ( perldoc File::ShareDir::Install),模式应该是,在我的Makefile.PL:
use ExtUtils::MakeMaker;
use File::ShareDir::Install;
install_share 'share';
install_share dist => 'dist-share';
install_share module => 'My::Module' => 'other-share';
WriteMakefile( ... ); # As you normaly would
package MY;
use File::ShareDir::Install qw(postamble);
Run Code Online (Sandbox Code Playgroud)
但是,通过这样做,我需要File::ShareDir::Install在我的系统上预安装作为运行Makefile.PL脚本的要求。出于显而易见的原因,将其声明为依赖项是行不通的!
我应该指示我的用户File::ShareDir::Install在我的模块之前显式安装吗?是否有可能进行安装程序内Makefile.PL,通过直接调用的CPAN模块?
我有一个小程序可以打开一个文件并对其进行一些操作。我将文件关闭订阅到程序终止如下:
static
void exit_handler (int ev, void *arg)
{
fprintf(stderr, "bye %d\n", WEXITSTATUS(ev));
fclose((FILE *)arg);
}
int main (int argc, char *argv[])
{
FILE *out;
...
out = fopen(argv[1], "wt");
if (out == NULL) {
perror("Opening output file");
exit(EXIT_FAILURE);
}
on_exit(exit_handler, out);
...
}
Run Code Online (Sandbox Code Playgroud)
尝试执行此操作时,我注意到只有在程序正常终止时它才能正常工作。在CTRL+ C( SIGINT) 的情况下,exit_handler不执行回调。
这不是很奇怪吗?我应该将exit(EXIT_FAILURE)调用关联到信号处理程序SIGTERM吗?在这种情况下,最佳做法是什么?
假设您有一个C支持泛型的类(因此C<X>定义了一个类型).我想做的事情如下:
我想获得一个Class<C<X>>类的实例.我想说这可以通过以下表达式获得:
C<X>.class
Run Code Online (Sandbox Code Playgroud)
但编译器不同意我的意见:P
任何提示?
假设我们有一个返回引用的子例程
sub aspirin {
my @items = qw(some items in here);
return \@items;
}
Run Code Online (Sandbox Code Playgroud)
另一个子程序采用数组引用
sub beetroot (\@) {
my $lst = shift;
print "$_\n" for @$lst;
}
Run Code Online (Sandbox Code Playgroud)
我想从中获取数组aspirin并beetroot用它提供.我想做点什么(方法A)
my $L = aspirin;
beetroot $L;
Run Code Online (Sandbox Code Playgroud)
但翻译抱怨,我需要做以下事情(方法B):
my $L = aspirin;
beetroot @$L;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
谢谢你的回答
这可能看起来是一个愚蠢的问题(因为它可能是特定于项目的),但在这种情况下它足够普遍:
我正在运行一段代码,它给出了ClassCastException我写的标题错误信息.这里所提到的转换是从类型的对象java.lang.reflect.Type来Class<?>.
除了原始类型,Java中哪种类型不是类?
谢谢你的回答
perl ×4
java ×3
c ×1
generics ×1
gnuplot ×1
gradle ×1
immutability ×1
logging ×1
packaging ×1
posix ×1
postgresql ×1
string ×1
unicode ×1
unit-testing ×1