我想知道为什么普通Linux终端中的退格字符实际上不会在打印时擦除字符(通常在键入时有效).
这按预期工作:
$ echo -e "abc\b\b\bxyz"
xyz
Run Code Online (Sandbox Code Playgroud)
(\b评估为退格,也可以插入Ctrl+ V Ctrl+ H- 呈现为^H(0x08))
但是当退格后的字符数量减少时,会发现奇怪的行为:
$ echo -e "abc\b\b\bx"
xbc
Run Code Online (Sandbox Code Playgroud)
它的行为类似于左箭头键而不是退格键:
$ echo -e "abc\e[D\e[D\e[Dx"
xbc
Run Code Online (Sandbox Code Playgroud)
擦除线后退工作正常:
$ echo -e "abc\e[1Kx"
x
Run Code Online (Sandbox Code Playgroud)
事实上,当我在终端输入Ctrl+ V Backspace时,^?(0x7f)产生而不是^H,这是Delascii字符,但是Ctrl+ V Del产生<ESC>[3~,但它是另一个故事..
那么有人可以解释为什么打印的退格字符不会删除字符吗?
(我的环境是xterm的Linux和一些其他的终端仿真器,$TERM== xterm,试图vt100,Linux以及)
在 Raku 中,中缀运算符可以像函数一样使用,例如:
1 + 2 ; # 3
infix:<+>(1, 2) ; # 3
[+] 1, 2 ; # 3
Run Code Online (Sandbox Code Playgroud)
前缀运算符可以与类似方法的语法(methodop)一起使用:
-1 ; # -1
1.:<-> ; # -1
Run Code Online (Sandbox Code Playgroud)
因此,(相当学术的)问题是,中缀运算符是否也可以以类似方法的方式使用,例如1.:<+>(2)(这是错误的)?
(1 + *)(2) ; # 3
Run Code Online (Sandbox Code Playgroud)
……那是函数(某种)定义和调用,而不是方法调用,也不是类似方法的语法。
my method plus(Int $b --> Int){
return self + $b;
}
1.&plus(2) ; # 3
Run Code Online (Sandbox Code Playgroud)
……但+不能使用名称,这也不是没有附加函数定义的直接操作符用法。
是否有应用和分配对象变量方法调用的惯用方法,但前提是它已定义(方法和结果)?
就像使用安全调用运算符.?和定义或运算符//,以及“DRY 原则”——在操作中只使用一次变量?
像这样(但使用另一个变量感觉像是在作弊):
my $nicevariable = "fobar";
# key step
(my $x := $nicevariable) = $x.?possibly-nonexistent-meth // $x;
say $nicevariable; # => possibly-nonexistent-meth (non-Nil) result or "foobar"
Run Code Online (Sandbox Code Playgroud)
... 并避免andthen,如果可能的话。
有人想在use函数语句中使用数组变量代替数组(列表)文字,如:
my @list = qw(foo zoo);
use Module @list;
Run Code Online (Sandbox Code Playgroud)
代替
use Module qw(foo zoo);
Run Code Online (Sandbox Code Playgroud)
所以她写道:
my @consts = qw(PF_INET PF_INET6);
use Socket @consts;
printf "%d, %d\n", PF_INET, PF_INET6;
Run Code Online (Sandbox Code Playgroud)
看似按预期工作:
2,10
然后,她正在使用其他模块,例如Time::HiRes.代替
use Time::HiRes qw(CLOCK_REALTIME CLOCK_MONOTONIC);
printf "%d, %d\n", CLOCK_REALTIME, CLOCK_MONOTONIC;
Run Code Online (Sandbox Code Playgroud)
0,1
她这样做:
my @consts = qw(CLOCK_REALTIME CLOCK_MONOTONIC);
use Time::HiRes @consts;
printf "%d, %d\n", CLOCK_REALTIME, CLOCK_MONOTONIC;
Run Code Online (Sandbox Code Playgroud)
0,0
它突然不起作用,就像它与Socket模块一起工作!这里发生了一件坏事.
(......这是在非严格的环境中.如果她使用use strict,她甚至会出错.另一方面,她在她的第一个看似有效的例子中没有任何暗示 - 即使她在use strict; use warnings; use diagnostics那里.)
现在她想探索这种奇怪的行为.尝试导入空列表:
my @consts = …Run Code Online (Sandbox Code Playgroud) 是否可以访问 Raku 地图代码块和/或任何代码中的“被调用者”(“this”)?
例如,如果想计算算术平均值
my $data = <1 10 0 7 2> ;
say $data.sum
/ $data ; # or @$data, same as $data.elems in this numeric context
# OUTPUT: «4?»
Run Code Online (Sandbox Code Playgroud)
分数相加
say $data.map(* / $data).sum
# OUTPUT: «4?»
Run Code Online (Sandbox Code Playgroud)
喜欢
<1 10 0 7 2>.map({ $_ / $this }).sum # but there's no $this
Run Code Online (Sandbox Code Playgroud)
或者
<1 10 0 7 2>.map( * / $this ).sum
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有一种惯用的方法可以仅通过对<…>数据文字的一系列方法调用或不同的方式来实现,而无需将数据存储在变量中?
在Ruby中,一切都应该是一个对象.但是我有一个很大的问题,就是通常的方式来定义函数对象
def f
"foo"
end
Run Code Online (Sandbox Code Playgroud)
与Python不同,f是函数结果,而不是函数本身.因此,f(),f,ObjectSpace.f都是"foo".还f.methods返回字符串方法列表.
如何访问函数对象本身?
我想用这种方式用class ="x"选择元素的所有后代元素:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.x * {
color: red;
}
</style>
</head>
<body>
a
<p>
b
<p class="x">
c
<p> should be red </p> foo
</p>
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这些元素并不适用.也*.x *没有.
我究竟做错了什么?
是否有编程语言,具有可用的交互式解释器,即使它可以编译为机器代码?
interpreter programming-languages compilation read-eval-print-loop
证书的签名可以使用不同的RSA填充方案,如PCKS1.5,PSS等.使用openssl工具,如何识别RSA签名中使用的填充方案?
在Haskell中,如何有效地获取与有限列表连接的无限列表的最后一项(?)?
last 不工作,它显然从头部迭代,所以以下永远不会完成:
-- let's have a list of all natural numbers,
-- with zero appended
arr = [1..] ++ [0]
-- it was fast! now get the last item, should be easy
res = last arr
Run Code Online (Sandbox Code Playgroud)
编辑:我想知道Haskell的内部表示[1..] ++ [0]是什么,它最初"完全没有评估"?如果它在内部将其表示为两个(未评估的)列表的"序列",则该last函数可以立即获取最后一个项目的最后一项.
在Plone(v 4.x)中创建"页面"的最明确的(但不是非常hackish - unPlonish)方式是什么,这将显示Plone的内部信息?我想生成一个页面文档,它会粘贴dir()(或任何我自己的函数)结果<pre/>或类似的东西.直截了当...我的意思是,无需创建Plone产品或直接修改服务器文件 - 只需使用ZMI ..
一些Perl模块使用hash参数导入,如:
use Test::Simple tests => 1
Run Code Online (Sandbox Code Playgroud)
这与记录的use使用变体不一致:
Run Code Online (Sandbox Code Playgroud)use Module VERSION LIST use Module VERSION use Module LIST use Module use VERSION从命名模块将一些语义导入当前包,通常通过将某些子例程或变量名称别名到包中.
而在我们的例子中,我们使用哈希而不是列表,至少在语义上 - 当然,
use Test::Simple qw(tests 1)
Run Code Online (Sandbox Code Playgroud)
是等价的,但对于人类局外人来说是没有意义的,他们希望列表是要导入的名称列表.
你如何解释/捍卫这种偏差?是否允许使用参数导入模块是推荐的语法糖?
raku ×3
perl ×2
perl-module ×2
arguments ×1
backspace ×1
certificate ×1
compilation ×1
cryptography ×1
css ×1
function ×1
haskell ×1
interpreter ×1
linux ×1
methods ×1
object ×1
openssl ×1
plone ×1
rsa ×1
ruby ×1
selector ×1
terminal ×1
text ×1