mapPerl中的函数是用Perl编写的吗?我只是无法弄清楚如何实现它.这是我的尝试:
use Data::Dumper;
sub Map {
my ($function, $sequence) = @_;
my @result;
foreach my $item (@$sequence) {
my $_ = $item;
push @result, $function->($item);
}
return @result
}
my @sample = qw(1 2 3 4 5);
print Dumper Map(sub { $_ * $_ }, \@sample);
print Dumper map({ $_ * $_ } @sample);
Run Code Online (Sandbox Code Playgroud)
$_in $function是未定义的,但是如何map克服这个?
基于这个讨论,我想知道函数作用域静态变量是否总是使用内存,或者是否允许编译器对其进行优化.为了说明这个问题,假设一个这样的函数:
void f() {
static const int i = 3;
int j = i + 1;
printf("%d", j);
}
Run Code Online (Sandbox Code Playgroud)
编译器很可能i会3 + 1在编译时内联函数并可能进行计算.由于这是i使用值的唯一位置,因此不需要分配任何静态内存.那么编译器是允许优化静态的,还是标准要求任何静态变量都分配了内存?
我想知道标准对以下代码的安全性的说法:
class A { int v; };
class B: public A { }; // no added data member
A a;
B& b = static_cast<B&>(a);
Run Code Online (Sandbox Code Playgroud)
显然的运行时类型a是A,不是B,所以剧组是不是真的类型安全的.但是,由于没有添加任何成员而且没有任何内容是虚拟的,IMO的类的内存布局应该是相同的,这应该可行(可能写入更好reinterpret_cast以表明这种行为?).我的猜测是这是UB,但适用于任何编译器.或者这实际上定义得很好?还是比较危险?
此外,如果B有一些额外的非虚拟成员方法会有什么变化吗?再一次,直觉上我会说不,但我想知道标准对此有何看法.
我对Perl很陌生,并且很难将其包裹在非常隐含的类型系统中.我想要实现的是一个简单的包装函数,它与它包装的函数具有相同的签名,因此可以在它的位置使用它.
所以,假设我有一个orig我想要包装的现有函数.我接受了许多输入参数,并根据这些参数具有不同的返回类型.只要我按以下方式编写包装器,返回类型与原始函数相同,它们都可以正常工作:
sub wrapper {
my ($first) = @_;
print "before. first argument: $first\n";
return orig(@_);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在执行之后在包装器中执行一些代码,orig我不知道如何保留类型.根据我的理解,对perl函数的输入始终是一个标量数组,输出也是如此.所以解决方案应该是这样的:
sub wrapper {
my ($first) = @_;
print "before. first argument: $first\n";
my @result = orig(@_);
print "after";
return @result;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有像预期的那样奏效.我错过了什么?如何编写这样的包装函数,它适用于任意返回类型?
我需要以固定的时间间隔一个接一个地执行多个函数,因此使用setTimeout.我想确保我理解它是如何执行的.我有以下逻辑:
setTimeout(function() {
//Execute first function
}, 200);
setTimeout(function() {
//Execute second function
}, 400);
setTimeout(function() {
//Execute third function
}, 600);
Run Code Online (Sandbox Code Playgroud)
这是否意味着第一个函数在200ms之后执行,第二个函数在第一个函数执行后200ms,第三个函数在第二个函数之后200ms执行,依此类推?或者我需要改变一些东西.
c++ ×2
perl ×2
casting ×1
downcast ×1
execution ×1
javascript ×1
map ×1
return-type ×1
settimeout ×1
static ×1
static-cast ×1