据我了解,在传输层和数据链路层都采用了流量控制和错误控制。如果数据链路保证了数据包的无错传递,那么传输层会捕获什么样的错误?
另外,在 TCP 中处理的 UDP 中可能会发生什么样的错误?
我想知道,出于教育目的,是否可以在python中重写所有for循环作为while循环.从理论上讲,if和while是最小的流量控制集.
在SO周围搜索显示关于基于范围的循环的问题将循环转换为python中的while循环,这显然可行,因为开始和结束索引被暴露.其他形式的for循环怎么样?例如,以各种形式循环遍历列表呢?
在C中,在单个表达式中分配和比较是很常见的:
n = n_init;
do {
func(n);
} while ((n = n.next) != n_init);
Run Code Online (Sandbox Code Playgroud)
据我了解,这可以用Rust表示:
n = n_init;
loop {
func(n);
n = n.next;
if n == n_init {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
其作用与C版本相同(假设循环体不使用continue).
是否有更简洁的方式在Rust中表达这个,或者上面的例子是理想的?
出于这个问题的目的,假设所有权或满足借用检查器不是问题.由开发人员来满足这些要求.
例如,作为整数:
n = n_init;
loop {
func(&vec[n]);
n = vec[n].next;
if n == n_init {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来很明显,Rust的例子是惯用的Rust - 但是我希望将这种循环风格转移到Rust,我很想知道是否有更好/不同的表达方式.
有人看到这个代码有什么问题吗?当我们执行它(在Linux上)时,我们直接进入"错误:未知主机"块.
Perl是5.8.6版
$hostname = "host2";
if ($hostname eq "host1") {
$dbhost = 'dbi:Oracle:dbhost1';
}
elsif ($hostname eq "host2") {
$dbhost = 'dbi:Oracle:dbhost2';
}
elsif ($hostname eq "host3" || $hostname eq "host4") {
$dbhost = 'dbi:Oracle:dbhost3';
}
else {
print "ERROR: UNKNOWN HOST\n";
die "Can't connect";
}
Run Code Online (Sandbox Code Playgroud) 有几次曾经问过这个问题,但这些答案似乎都不适用于我的情况.
我的代码:
open(FILE, "<", $fileb) or die "File not openable: $!";
while (<FILE>) {
$filebmeta[$line] = (data => $_, match => -1);
$line++;
}
close(FILE);
$line = 0;
for my $hashref (@filebmeta) {
print "$hashref->{data}\n";
}
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,它吐出:'不能使用字符串(" - 1")作为HASH引用,而在./partc.pl第152行使用"strict refs".
知道为什么会这样吗?我似乎无法在循环中正确地取消引用散列.
在下面的代码中,我试图检查"shape_list"中是否已存在变量"new_shape".如果它不存在,我想添加它; 如果确实存在,我只想留下它.到目前为止,我只使用标志实现了这一点.我确信有一种方法可以在没有旗帜的情况下更有效地完成同样的事情.有什么建议?感谢您的帮助!
flag = 0
for shape in shape_list:
if new_shape == shape:
flag = 1
break
if flag == 0:
shape_list.append(new_shape)
Run Code Online (Sandbox Code Playgroud) 我经常看到node.js程序员在调用期望回调的函数时,执行此操作:
callSomeThing(arg1, arg2, function (err, data) {
if(err) {
// Handle the error case
} else {
// Proceed normally
}
});
Run Code Online (Sandbox Code Playgroud)
是否有任何技术原因导致他们使用else块而不是在错误情况下返回,或者它只是代码风格的东西?
callSomeThing(arg1, arg2, function (err, data) {
if(err) {
// Handle the error case
return;
}
// proceed normally
});
Run Code Online (Sandbox Code Playgroud) 我试图理解一些有一种新颖的承诺方法的代码:
var sequence = Promise.resolve();
sequence = sequence.then(
function() {
// success function
}
);
sequence = sequence.then(
function(keyPair) {
// success function
},
function(err) {
// err function
}
);
sequence = sequence.then(
function(keyPair) {
// success function
},
function(err) {
// err function
}
);
Run Code Online (Sandbox Code Playgroud)
这与正常的链式.then方法有何不同?使用安全吗?
我是Python的新手,也是我的第3天.我正在用这个丑陋的例子来热身python的一些语法.
networks = {"Ufone": 333, "Mobilink": 300, "Warid": 321}
def get_network(n):
for network in networks:
if n == networks[network]:
return "Network is " + str(network)
else:
return "Network not listed"
print(get_network(321))
Run Code Online (Sandbox Code Playgroud)
你知道它应该结果Network is Warid 但是当我在Sublime Console中运行脚本时,Ctrl + B有时会产生结果..
Network is Warid
[Finished in 0.1s]
和其他时间..
Network not listed
[Finished in 0.1s]
我自己知道我没有改变函数参数中的任何值.这是我第一次在编程中遇到这个有趣的问题.
假设我有四种情况的四种功能:
void ac() {
//do something
}
void ad() {
//do something
}
void bc() {
//do something
}
void bd() {
//do something
}
void f(bool a, bool b, bool c, bool d) {
if(a and c) {
ac();
}
else if(a and d) {
ad();
}
else if(b and c) {
bc();
}
else if(b and d){
bd();
}
else {
throw 1;
}
}
Run Code Online (Sandbox Code Playgroud)
对于2比2的情况,这很简单,但在更复杂的情况下,这可能会变得非常繁琐.有没有办法简化这个?
我有三个 if语句:
if (!(a == 0 && b == 0)) {...}
if (!(a == 0 && b != 0)) {...}
if (!(a != 0 && b != 0)) {...}
我想将它们组合在一个代码块中,例如方法.
如果一个人运行,我不希望其他语句运行.如果我想避免提出一些好的逻辑,有一些解决方法,但我想知道是否有一种美妙的方式来编写它.
flow-control ×11
python ×3
perl ×2
arrays ×1
c++ ×1
callback ×1
es6-promise ×1
flags ×1
hash ×1
java ×1
javascript ×1
logic ×1
networking ×1
node.js ×1
promise ×1
python-3.3 ×1
rust ×1
string ×1