条件(三元)运算符表明三元运算符是if...的替代品else。我一直这么认为,但最近我有一个逻辑问题。
考虑这个简短的调试会话:
DB<1> $s='X'
DB<2> 1 ? $s .= '_' : $s = '_'
DB<3> x $s
0 '_'
Run Code Online (Sandbox Code Playgroud)
因此,如果为 true,则应该计算1表达式(而不是)。$s .= '_'$s = '_'
但为什么$s只是'_'最后呢?
我是R新手并且有一个问题.我试图将一些文本放入R图中.这是使用UsingR包中的亮度数据集的一些代码.
library(UsingR)
brightness
MyMean <- mean(brightness)
MyMedian <- median(brightness)
MySd <- sd(brightness)
hist(brightness, breaks=35, main="This is a Histogram",
xlab="Brightness", ylab="Frequency", xlim=c(0,15), ylim=c(0, 200))
text(3.5, 150, paste("Mean =", round(MyMean, 1), "\n Median =",
round(MyMedian, 1), "\n Std.Dev =", round(MySd, 1)))
Run Code Online (Sandbox Code Playgroud)
此代码生成:

此输出的问题是文本未左对齐.有谁知道如何使文本保持对齐.
谢谢.
我有一个String数组.我想将其转换为字节数组.我使用Java程序.例如:
String str[] = {"aa", "55"};
Run Code Online (Sandbox Code Playgroud)
转换成:
byte new[] = {(byte)0xaa, (byte)0x55};
Run Code Online (Sandbox Code Playgroud)
我能做什么?
这是我目前的makefile.
CXX = g++
CXXFLAGS = -Wall -O3
LDFLAGS =
TARGET = testcpp
SRCS = main.cpp object.cpp foo.cpp
OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)
.PHONY: clean all
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET)
.cpp.o:
$(CXX) $(CXXFLAGS) -c $< -o $@
%.d: %.cpp
$(CXX) -M $(CXXFLAGS) $< > $@
clean:
rm -f $(OBJS) $(DEPS) $(TARGET)
-include $(DEPS)
Run Code Online (Sandbox Code Playgroud)
它有一个例外,完美地工作.如果目录已经是干净的(没有*.d,*.o)并且我运行'make clean',它会重新创建依赖项,然后立即删除它们:
[user@server proj]$ make
g++ -M -Wall -O3 foo.cpp > foo.d
g++ -M -Wall -O3 object.cpp > object.d
g++ …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个函数,它基本上输出多个长度字符串,例如,
"110110" "110" "101" "011"
Run Code Online (Sandbox Code Playgroud)
现在,我在变量a中分配了函数的输出,
a<- c("110110", "110", "101", "011")
Run Code Online (Sandbox Code Playgroud)
a的类出来是个性.现在,我只想要那些具有最大长度的字符串.例如,在该示例中,最大长度为"110110".所以,我想要那个.我尝试使用max命令,但如果有多个,则只返回一个最大长度字符串.例如,在这些字符串中,
a <- c("110", "101", "abc", "cab")
Run Code Online (Sandbox Code Playgroud)
使用max命令仅返回"cab".但是,我想要所有最大长度的字符串.我该怎么做?
(抱歉这个标题,但是这个“功能”确实让我困惑)
在学习 Perl 时,我了解到o使用变量的正则表达式的修饰符只会被评估一次,即使变量在初始评估后发生变化。最初看起来没有任何问题,这是明确指定的。
显然,在所使用的变量获得其值之前不能进行初始评估。
现在qr让生活变得更有趣了。考虑以下代码(也在定义其他变量的循环中执行):
{
my $n = $name;
$n =~ s/[^\w\.-]/_/g;
$n = qr:^${n}\@${another_variable}$:o;
@a = grep { !/$n/ } @a;
}
Run Code Online (Sandbox Code Playgroud)
当直接使用正则表达式时qr,人们可能会争辩说正则表达式只编译一次,即使变量的范围超出范围(超出范围是否被视为变量的更改?)
但是当使用qr构建正则表达式并将其分配给词法变量时,编译的正则表达式将超出范围,因此我期望正则表达式不能重用并且将被重新构建(基本思想是内部的正则表达式grep应该不必为每次迭代而重建)。
由于生活是残酷的,似乎引用的整个正则表达式$n从未被重建,因此使用第一个值直到程序停止。
有趣的是,在 Perl 5.18.2(正在使用的版本)中不再提及修饰符o,perlre(1)而 Perl 5.26.1 在相应的页面中说:
o - 假装优化你的代码,但实际上引入了错误
那么任何人都可以解释“一次”评估的规则(以及语义在 Perl 的生命周期中是否发生了变化)?
当试图assert()在Perl中实现C的宏时,存在一些基本问题.首先考虑以下代码:
sub assert($$) {
my ($assertion, $failure_msg) = @_;
die $failure_msg unless $assertion;
}
# ...
assert($boolean, $message);
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它不像C:在C中我会写assert($foo <= $bar),但有了这个实现,我必须写assert($foo <= $bar, '$foo <= $bar'),即重复条件为字符串.
现在我想知道如何有效地实现这一点.easy变量似乎将字符串传递给assert()并用于eval计算字符串,但在评估eval时无法访问变量.即使它可以工作,每次解析和评估条件也会非常低效.
传递表达式时,我不知道如何从中创建一个字符串,特别是在它已经被评估时.
另一个使用assert(sub { $condition })代码ref更容易制作字符串的变体被认为太难看了.
构造assert(sub { (eval $_[0], $_[0]) }->("condition"));与
sub assert($)
{
die "Assertion failed: $_[1]\n" unless $_[0];
}
Run Code Online (Sandbox Code Playgroud)
会怎么做,但打电话很难看.我正在寻找的解决方案是编写条件只检查一次,同时能够重现原始(未评估)条件并有效地评估条件.
那么更优雅的解决方案是什么?显然,如果Perl有一个宏或类似的语法机制允许在编译或评估之前转换输入,那么解决方案会更容易.
Perl 5.18.2 文档splice有这个例子:
my(@a) = splice(@_,0,shift);\nmy(@b) = splice(@_,0,shift);\nRun Code Online (Sandbox Code Playgroud)\n我想知道:\n如果@_在之前进行评估,shift则有一项太多,结果将无法正确。\n因此从概念上讲,必须shift首先执行。\n但是,在 C 中,他们告诉您永远不应该依赖于特定的顺序实际参数的评估(shift修改@_)。
那么,该代码是否只能工作,因为@_它作为引用传递(以便能够更改它),并且shift之前被评估的代码splice可以访问@_?
我发现这个例子可以追溯到 1996 年(至少)和这本书(第 219 页;第 535 页的评论表明它甚至可能来自 Perl 4):
\n\n\nWALL、Larry、Tom CHRISTIANSEN 和 Randal L. SCHWARTZ,1996 年。Perl 编程。2. 塞瓦斯托波尔,CA 95472,美国:O\xe2\x80\x99Reilly & Associates, Inc. ISBN\xc2\xa01-56592-149-6
\n
我不知道之间的差别stopifnot()和assertError()有:
assertError()默认情况下未找到(您必须首先加载“工具”包),但是stopifnot()。
更重要的是, assertError() 总是会抛出错误消息,即使我传递了像TRUEor 之类的参数FALSE,而stopifnot()做明显和预期的事情。
阅读手册页没有帮助。而不是的正确用法是assertError(length(x) != 7)什么?如果x未定义,则语句不会产生错误,但是一旦定义,就会产生错误,与长度x(7 与否)无关。
我在一个文件中有一个模块,它导出一个作为数组引用的常量。我可以在其定义模块中使用该常量,但在导入后无法使用它。错误消息说Can't use bareword ("AR") as an ARRAY ref while "strict refs" in use at mod.pl line 28.。
考虑这个演示代码:
#!/usr/bin/perl
require 5.018_000;
use warnings;
use strict;
package Test;
use warnings;
use strict;
BEGIN {
require Exporter;
our $VERSION = 1.00; # for version checking
# Inherit from Exporter to export functions and variables
our @ISA = qw(Exporter);
our @EXPORT = qw(); # exported by default
our @EXPORT_OK = qw(AR); # can be optionally exported
}
use constant AR => …Run Code Online (Sandbox Code Playgroud)