小编wil*_*ell的帖子

如何正确清理Python对象?

class Package:
    def __init__(self):
        self.files = []

    # ...

    def __del__(self):
        for file in self.files:
            os.unlink(file)
Run Code Online (Sandbox Code Playgroud)

__del__(self)上面因AttributeError异常而失败.我理解Python__del__()调用时不保证存在"全局变量"(在此上下文中的成员数据?).如果是这种情况并且这是异常的原因,我该如何确保对象正确破坏?

python destructor

436
推荐指数
10
解决办法
40万
查看次数

Vim:对目录中的文件应用设置

如何为当前目录下的所有文件指定Vim设置?

理想的解决方案是,如果Vim在搜索〜/ .vimrc之前搜索并读取当前目录中的.vimrc,并在那里应用整个树的设置.

我见过一个插件,但这意味着应用的设置不透明,因为它们需要安装插件.相反,模式行是透明的,因为无论用户的vimrc还是特定的vim调用,模式行设置都将应用于该文件.

我尝试过的是

  • 将.vimrc放在工作目录中
  • :so vimrc 在模式中.

我想两者都不会出于安全原因而起作用.我不需要vimrc的全部功能; 绑定到模式行可接受的设置就足够了.我的目标是让vimmers更容易在项目中采用编码标准.

vim

99
推荐指数
7
解决办法
2万
查看次数

zsh:在目录定界符上停止reverse-kill-word

zsh中,如何设置行编辑器,使back-kill-word在目录分隔符上停止?目前在我的bash设置中,如果我键入

cd ~/devel/sandbox
Run Code Online (Sandbox Code Playgroud)

然后在"devel /"之后点击Cw点.在我的zsh设置中,点将在"cd"之后.我想设置zsh所以它的行为与bash类似.

zsh

45
推荐指数
3
解决办法
7965
查看次数

在Ruby中导出环境变量

如何将Ruby脚本中的环境变量导出到父shell?例如,实现readBash内置的天真实现:

#!/usr/bin/ruby

varname = ARGV[0]
ENV[varname] = STDIN.gets  # but have varname exported to the parent process
Run Code Online (Sandbox Code Playgroud)

ruby environment-variables

37
推荐指数
3
解决办法
4万
查看次数

Python中提升的内容是什么?

请考虑以下代码:

try:
    raise Exception("a")
except:
    try:
        raise Exception("b")
    finally:
        raise
Run Code Online (Sandbox Code Playgroud)

这会提高Exception: a.我预计它会提高Exception: b(我需要解释原因吗?).为什么最终raise提出原始异常而不是(我认为)是最后一个异常引发的?

python exception

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

如何将char*复制到字符串中,反之亦然

如果我将char*传递给函数.我想把那个char*转换为std :: string,一旦我得到我的结果,就从std :: string将它转换回char*来显示结果.

  1. 我不知道如何为转换做这个(我不是在谈论const char*而只是char*)
  2. 我不知道如何操纵我发送的指针的值.

所以我需要做的步骤

  1. 接受一个炭*
  2. 将其转换为字符串.
  3. 获取该字符串的结果并以char*的形式将其放回
  4. 返回结果,使得值应该在函数外部可用而不会被破坏.

如果可能的话,我可以看看如何通过引用vs一个指针来完成它(它的地址我通过值传入但是我仍然可以修改指针所指向的值.所以即使函数中指针地址的副本被破坏了我仍然看到外面的变化值.

谢谢!

c++

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

带有copy_n()和朋友的std :: istream_iterator <>

下面的片段从中读取三个整数std::cin; 它写入两个numbers并丢弃第三个:

std::vector<int> numbers(2);
copy_n(std::istream_iterator<int>(std::cin), 2, numbers.begin());
Run Code Online (Sandbox Code Playgroud)

我希望代码能够准确地读取两个整数std::cin,但事实证明这是一个正确的,符合标准的行为.这是标准中的疏忽吗?这种行为的理由是什么?


从C++ 03标准中的24.5.1/1开始:

在构造之后,每次使用++时,迭代器都会读取并存储一个值T.

所以在上面的代码中,在调用时,流迭代器已经读取了一个整数.从那时起,算法中迭代器的每次读取都是预读,从而产生从先前读取缓存的值.

下一个标准的最新草案n3225似乎没有任何变化(24.6.1/1).

在相关的说明中,参考istream_iterator(istream_type& s)构造函数的当前标准的24.5.1.1/2 读取

效果:初始化in_streams.value可以在施工期间或第一次参考时初始化.

重点是" value 可以初始化......"而不是" 应该初始化".这听起来与24.5.1/1相矛盾,但也许这应该是一个自己的问题.

c++ istream-iterator

26
推荐指数
2
解决办法
2035
查看次数

如何在不使用abort()的情况下断言()?

如果我使用assert()并且断言失败assert()则会调用abort(),突然结束正在运行的程序.我的生产代码中负担不起.有没有办法在运行时断言但能够捕获失败的断言,所以我有机会优雅地处理它们?

c++ assert exception

24
推荐指数
4
解决办法
2万
查看次数

输出迭代器的value_type

STL通常定义一个输出迭代器,如下所示:

template<class Cont>
class insert_iterator
: public iterator<output_iterator_tag,void,void,void,void> {
    // ...
Run Code Online (Sandbox Code Playgroud)

为什么输出迭代器定义value_typevoid算法知道它应该输出什么类型的值会很有用.

例如,一个将URL查询"key1=value1&key2=value2&key3=value3"转换为包含键值字符串元素的任何容器的函数.

template<typename Ch,typename Tr,typename Out>
void parse(const std::basic_string<Ch,Tr>& str, Out result)
{
    std::basic_string<Ch,Tr> key, value;
    // loop over str, parse into p ...
        *result = typename iterator_traits<Out>::value_type(key, value);
}
Run Code Online (Sandbox Code Playgroud)

这提示的SGI参考页面value_type是因为无法取消引用输出迭代器.但这不是唯一的用途value_type:我可能想要实例化一个以便将它分配给迭代器.

有什么替代方法可以用输出迭代器构造输出值?我考虑过两种方法:

  • 接受一个函数参数,该参数将返回正确类型的对象.我仍然想要一个不采用该函数对象参数的算法版本.
  • 要求输出容器保持pair<string,string>,或者从中可以转换的类型.我想知道如果没有这个要求我能做到,也许允许任何可以从两个构造的元素std::string.

c++ iterator stl

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

函数模板的多个定义

假设头文件定义了一个函数模板.现在假设#include这个头文件有两个实现文件,每个文件都调用了函数模板.在两个实现文件中,函数模板都使用相同的类型进行实例化.

// header.hh
template <typename T>
void f(const T& o)
{
    // ...
}

// impl1.cc
#include "header.hh"

void fimpl1()
{
    f(42);
}

// impl2.cc
#include "header.hh"

void fimpl2()
{
    f(24);
}
Run Code Online (Sandbox Code Playgroud)

人们可能会期望链接器会抱怨多个定义f().具体来说,如果f()不是模板那么确实如此.

  • 为什么链接器不会抱怨多个定义f()
  • 是否在标准中指定链接器必须优雅地处理这种情况?换句话说,我是否可以始终依靠与上述类似的程序进行编译和链接?
  • 如果链接器可以足够聪明地消除一组函数模板实例化的歧义,为什么它不能对常规函数执行相同的操作,因为它们与实例化的函数模板的情况相同?

c++ linker templates

10
推荐指数
2
解决办法
5586
查看次数