小编Bre*_*dan的帖子

bash有没有办法在不设置变量的情况下取消导出变量?

是否有可能export在Bash中使用变量,然后取消导出它,而不是完全取消它?即它仍然可用于当前shell,但不适用于子进程.

你可以随时做到这一点,但它很难看(我很好奇):

export FOO

#...

_FOO=$FOO
unset FOO
FOO=$_FOO
Run Code Online (Sandbox Code Playgroud)

关于其他炮弹的答案也被接受了.

unix bash shell environment sh

28
推荐指数
1
解决办法
3720
查看次数

为什么这个 MutexGuard 没有掉线?

The Rust Book 的第 20 章中,构建了一个线程池的示例实现。作业通过单生产者多消费者通道传递给工作人员:每个工作人员都有一个Arc<Mutex<Receiver>>从队列中挑选工作。

工作线程主体的第一个示例如下所示:

loop {
    let job = receiver.lock().unwrap().recv().unwrap();

    println!("Worker {} got a job; executing.", id);

    job();
}
Run Code Online (Sandbox Code Playgroud)

当我看到这个时,我的第一个想法是“但是互斥锁在job运行时被保持”(即我不希望互斥锁被释放,直到lock循环结束时的返回值超出范围)。

然而,这本书提供了第二个例子:

while let Ok(job) = receiver.lock().unwrap().recv() {
    println!("Worker {} got a job; executing.", id);

    job();
}
Run Code Online (Sandbox Code Playgroud)

这本书说这个例子展示了我描述的问题,即“锁在调用期间保持保持job()”。它继续说,前一个例子逃避了这个问题,因为“一旦语句结束,MutexGuardlock方法返回的值就会被删除let job”。

最后一部分听起来好像,因为MutexGuard从来没有真正分配给变量,一旦表达式完成评估,它的生命周期就结束了。那是有道理的。但第二个例子不也是如此吗?为什么在while表达式中会改变MutexGuard值的生命周期?

lifetime rust

8
推荐指数
2
解决办法
424
查看次数

在 Python 中子类化时附加到成员列表

说我有这门课:

class FooClass(object):
    foos = ["foo", "bar"]

    def do_foos(self):
        for foo in self.foos:
            print("I have a " + foo)

    # ...
Run Code Online (Sandbox Code Playgroud)

我想为这个扩展的类创建一个 SpecialisedFooClass FooClass,将一个项目添加"spec"foos(即foos包含["foo", "bar", "spec"])。

SpecialisedFooClass.foos应该取决于FooClass.foos:如果我更改FooClass'定义以便foos包含["foo", "bam", "bat"],则SpecialisedFooClass.foos应该包含["foo", "bam", "bat", "spec"]


这是迄今为止我想出的最好的方法:

class SpecialisedFooClass(FooClass):
    foos = FooClass.foos + ["spec"]
Run Code Online (Sandbox Code Playgroud)

但我发现明确提到了FooClass有关。当我决定添加一个中间子类时(即当SpecialisedFooClass' 超类更改时),我将不可避免地忘记更新此引用。事实上,我已经在 IRL 使用我正在处理的代码库中犯了这个错误(实际上并没有处理 foos、bams 和 bats...)。


在我的情况下实际上没有特殊要求foos是类成员而不是实例成员,所以这也可以,但我觉得它很难看。此外,该super调用仍然有一个显式的类引用 …

python oop inheritance

3
推荐指数
1
解决办法
1139
查看次数

这个数字在Bash的段错误信息中意味着什么?

我有一个产生分段错误的程序,我在Linux上运行.

直接运行程序,我得到:

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

当我在Bash脚本中运行它时,我得到:

./script.sh: line 1:  4095 Segmentation fault      (core dumped) ./prog
Run Code Online (Sandbox Code Playgroud)

这个数字(在我的例子中为4095)每次都不同.似乎总是增加; 如果我快速运行脚本很多次,它似乎每次增加5.

这个数字告诉我什么?

unix linux bash shell segmentation-fault

2
推荐指数
1
解决办法
1576
查看次数

Clojure:为什么我不能在不调用它们的情况下引用类方法?

这是一个 Clojure REPL 会话:

moon.core> Double
java.lang.Double
moon.core> (Double/parseDouble "1.0")
1.0
moon.core> Double/parseDouble
CompilerException java.lang.RuntimeException: Unable to find static field: parseDouble in class java.lang.Double, compiling:(*cider-repl moon*:1:7159) 
Run Code Online (Sandbox Code Playgroud)

我可以引用Double,也可以调用 Double/parseDouble,但不能直接引用。对于 Java 标准库中的其他类方法(例如Math/absInteger/parseInt),我看到了相同的结果。为什么?

lisp jvm clojure clojure-repl

1
推荐指数
1
解决办法
278
查看次数