小编mjn*_*n12的帖子

是否可以在Vim中显示缩进指南?

我是一个长期的Vim用户(3或4年),他最近开始处理一些深层嵌套的代码.此代码使用空格缩进,而不是制表符.我想要一些干净且不分散注意力的缩进指示,以帮助跟踪我在看多层次深层时所处的代码块.

:set list 
Run Code Online (Sandbox Code Playgroud)

仅显示制表符和结束行字符.我找到了一个插件(目前似乎无法挖掘出来),它会突然逐渐变暗颜色突出每个缩进级别,但这在视觉上没有吸引力.理想情况下,我希望在每个缩进级别看到细垂直线.许多新奇的编辑都有这个功能,但我还是不愿意放弃Vim.

有谁知道如何实现这一目标?

vim plugins highlighting indentation

45
推荐指数
6
解决办法
4万
查看次数

memcpy vs for循环 - 从指针复制数组的正确方法是什么?

我有一个foo(int[] nums)我理解的功能基本上相当于foo(int* nums).在里面foo我需要将指向的数组的内容复制nums到一些int[10]声明的范围内foo.我理解以下内容无效:

void foo (int[] nums) 
{
    myGlobalArray = *nums
}
Run Code Online (Sandbox Code Playgroud)

复制数组的正确方法是什么?我应该像这样使用memcpy:

void foo (int[] nums)
{
    memcpy(&myGlobalArray, nums, 10);
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用for循环?

void foo(int[] nums)
{
    for(int i =0; i < 10; i++)
    {
        myGlobalArray[i] = nums[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

我缺少第三种选择吗?

c++ arrays pointers copy

35
推荐指数
3
解决办法
5万
查看次数

如何在Perl中将变量用作模块名称?

我知道可以在Perl中使用变量作为包变量的变量名.我想使用变量的内容作为模块名称.例如:

package Foo;
our @names =("blah1", "blah2");
1;
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,我希望能够将标量的内容设置为"foo",然后Foo通过该标量访问names数组.

my $packageName = "Foo";
Run Code Online (Sandbox Code Playgroud)

基本上我想做的事情是:

@{$packageName}::names; #This obviously doesn't work.
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用

my $names = eval '$'. $packageName . "::names" 
Run Code Online (Sandbox Code Playgroud)

但只有当它Foo::names是一个标量.没有eval声明,有没有其他方法可以做到这一点?

perl module

16
推荐指数
2
解决办法
7973
查看次数

C/C++中的dlopen和全局变量

由于一些限制,我被迫在运行时加载用C编写的库.第三方为我提供了两个库作为静态存档,我们将其转换为共享对象.我正在使用的应用程序根据一些硬件参数在运行时加载其中一个库.不幸的是,其中一个库主要配置了全局变量.

我已经使用dlsym加载函数引用但是我可以使用dlsym来加载对这些全局变量的引用吗?

c c++ dlopen

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

Lxml元素与名称空间的相等性

我试图使用Lxml来解析.docx文档的内容.我知道lxml将命名空间前缀替换为实际的命名空间,但是这使得检查我正在使用的元素标记类型真的很痛苦.我希望能够做类似的事情

if (someElement.tag == "w:p"):
Run Code Online (Sandbox Code Playgroud)

但由于lxml坚持预先设置te ful命名空间,我要么必须做类似的事情

if (someElemenet.tag == "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p'):
Run Code Online (Sandbox Code Playgroud)

或者像这样从元素的nsmap属性中查找完整的命名空间名称

targetTag = "{%s}p" % someElement.nsmap['w']
if (someElement.tag == targetTag):
Run Code Online (Sandbox Code Playgroud)

如果有一种更容易的方法来说服lxml

  1. 给我标签字符串没有附加名称空间,我可以使用prefix属性和这些信息来检查我正在使用哪个标签或
  2. 只需使用前缀给我标记字符串

在编写此解析器时,这将节省大量的击键次数.这可能吗?我在文档中遗漏了什么吗?

python lxml xml-namespaces

8
推荐指数
3
解决办法
5205
查看次数

Reactive Cocoa - 将某些信号值转换为错误或已完成

也许我仍然在反应性学习曲线上挣扎,但我很难弄清楚如何将非反应类与其他反应代码联系起来.我正在使用一个类别来扩展非反应类.

该属性只是一个Enum,表示网络操作的当前状态,如New,Submitted,Processing和Completed.现在我在我的类别中写了以下方法:

@implementation JRequestBase (RACExtensions)
- (RACSignal*) rac_RequestStateSignal
{
    return  RACAble(self, state);
}
@end
Run Code Online (Sandbox Code Playgroud)

但是,当状态从Processing - > Completed或从任何状态转换为Errored时,我希望此信号发送Completed或Error而不是Next Value.我怎样才能在一个类别中实现这一目标?我想做的事情如下:

@implementation JRequestBase (RACExtensions)
- (RACSignal*) rac_RequestStateSignal
{
    return  [RACAble(self, state) map:^(NSNumber *state){
                 if ([state intValue] == iRequestStateComplete)
                 {    
                     # SEND COMPLETE
                 }
                 else if ([state intValue] == iRequestStateErrored)
                 { 
                     # SEND ERROR
                 }
                 else
                 { 
                     return state;
                 }
            }];
}
@end
Run Code Online (Sandbox Code Playgroud)

编辑:我看了一下GHAPIDemo并提出了以下建议:

- (RACSignal*) rac_RequestSignal
{
    RACSubject *subject = [[RACReplaySubject alloc] init];
    [[RACAble(self, state) subscribeNext:^(NSNumber* s){
        if ( [s intValue] == …
Run Code Online (Sandbox Code Playgroud)

objective-c reactive-cocoa

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

单身角色在驼鹿

我正在尝试使用Perl和Moose编写单例角色.我知道MooseX :: Singleton模块是可用的,但是当我们的项目需要另一个CPAN模块时总是存在阻力.在尝试这个并遇到一点麻烦后,我想了解为什么我的方法不起作用.我写的单身人士角色如下:

package Singleton;
use Moose::Role;

my $_singleInstance;

around 'new' => sub {
    my $orig = shift;
    my $class = shift;
    if (not defined $_singleInstance ){
        $_singleInstance = $class->$orig(@_);
    }
    return $_singleInstance;
};

sub getInstance
{
    return __PACKAGE__->new();
}

1;
Run Code Online (Sandbox Code Playgroud)

当只有一个类使用单例角色时,这似乎可以找到.但是,当两个类(例如ClassA和ClassB)都使用Singleton角色时,它们都会引用共享的$ _singleInstance变量.如果我调用ClassA-> getInstance,它将返回对ClassA对象的引用.如果我稍后在同一个脚本中调用ClassB-> getInstance,它将返回对ClassA类型的对象的引用(即使我明确地为ClassB调用了getInstance方法).如果我不使用角色并实际将代码从Singleton角色复制并粘贴到ClassA和ClassB中,它似乎工作正常.这里发生了什么?

perl singleton moose

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

Tk网格无法正常调整大小

我正在尝试用python中的Tkinter编写一个简单的ui,我无法在网格中获取小部件来调整大小.每当我调整主窗口的大小时,入口和按钮小部件根本不会调整.

这是我的代码:

 class Application(Frame):
     def __init__(self, master=None):
         Frame.__init__(self, master, padding=(3,3,12,12))
         self.grid(sticky=N+W+E+S)
         self.createWidgets()

     def createWidgets(self):
         self.dataFileName = StringVar()
         self.fileEntry = Entry(self, textvariable=self.dataFileName)
         self.fileEntry.grid(row=0, column=0, columnspan=3, sticky=N+S+E+W)
         self.loadFileButton = Button(self, text="Load Data", command=self.loadDataClicked)
         self.loadFileButton.grid(row=0, column=3, sticky=N+S+E+W)

         self.columnconfigure(0, weight=1)
         self.columnconfigure(1, weight=1)
         self.columnconfigure(2, weight=1)

 app = Application()
 app.master.title("Sample Application")
 app.mainloop()
Run Code Online (Sandbox Code Playgroud)

python grid resize tkinter

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

Gevent.monkey.patch_all 破坏了依赖 socket.shutdown() 的代码

我目前正在努力为现有的 django 项目添加对 gevent-socketio 的支持。我发现 gevent.monkey.patch_all() 调用破坏了负责从套接字接收数据的线程的取消机制,我们现在将调用SocketReadThread类。

SocketReadThread非常简单,它在阻塞套接字上调用recv()。当它接收到数据时,它会处理它并再次调用recv()。当发生异常时或线程停止时如发生时的recv()返回的0字节socket.shutdown(SHUT_RDWR)被称为在SocketReadThread.stop_reading()

当 gevent.monkey.patch_all() 替换默认套接字实现时会出现问题。我得到以下异常,而不是很好地关闭:

错误:[Errno 9] 文件描述符已在另一个 greenlet 中关闭

我假设这是因为 gevent 使我的套接字非阻塞以发挥其魔力。这意味着当我调用socket.shutdown(socket.SHUT_RDWR) 时,正在为猴子修补socket.recv调用工作的greenlet试图从关闭的文件描述符中读取。

我编写了一个示例来隔离这个问题:

from gevent import monkey

monkey.patch_all()

import socket
import sys
import threading
import time


class SocketReadThread(threading.Thread):
    def __init__(self, socket):
        super(SocketReadThread, self).__init__()
        self._socket = socket

    def run(self):
        connected = True
        while connected:
            try:
                print "calling socket.recv"
                data = self._socket.recv(1024)
                if (len(data) < 1):
                    print "received …
Run Code Online (Sandbox Code Playgroud)

python sockets gevent

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