小编Thi*_*uda的帖子

在构造完所有子类之后,如何在超类中执行某些代码?

有没有办法在C#中做到这一点?我知道子类在调用自己的构造函数之前会调用超类构造函数,但是如果我在超类上有一些代码只能在所有子类构造函数被调用之后执行呢?

.net c# vb.net oop

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

在python的argparse模块中,如何在大括号之间禁用打印子命令选项?

如何禁用打印子命令选项,大括号之间的选项?使用http://docs.python.org/dev/library/argparse.html#sub-commands上的示例,正常输出为:

usage:  [-h] {foo,bar} ...

optional arguments:
-h, --help  show this help message and exit

subcommands:
{foo,bar}   additional help
Run Code Online (Sandbox Code Playgroud)

我想要的是打印这个:

usage:  [-h] {foo,bar} ...

optional arguments:
-h, --help  show this help message and exit

subcommands:
Run Code Online (Sandbox Code Playgroud)

只删除最后一行.

python argparse

6
推荐指数
2
解决办法
1259
查看次数

在Castle Windsor,我可以注册一个接口组件并获得实现的代理吗?

让我们考虑一些情况:

_windsor.Register(Component.For<IProductServices>().ImplementedBy<ProductServices>().Interceptors(typeof(SomeInterceptorType));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我要求一个IProductServices时,windsor将代理接口拦截接口方法调用.如果相反,我这样做:

_windsor.Register(Component.For<ProductServices>().Interceptors(typeof(SomeInterceptorType));
Run Code Online (Sandbox Code Playgroud)

然后我不能要求windsor解析IProductServices,而是要求ProductServices,它将返回一个动态子类,它将拦截虚方法调用.当然动态子类仍然实现'IProductServices'

我的问题是:我可以像第一种情况一样注册接口组件,并像第二种情况一样获取子类代理吗?

我想
要这样做有两个原因:1 - 因为要解析的代码无法了解ProductServices类,只能了解IProductServices接口.2 - 因为一些将发送方作为参数传递的事件调用将传递ProductServices对象,并且在第一种情况下,此对象是动态代理上的字段,而不是windsor返回的真实对象.让我举一个如何使事情复杂化的例子:假设我有一个自定义集合,当它们的项目通知属性更改时会执行某些操作:

private void ItemChanged(object sender, PropertyChangedEventArgs e)
    {
        int senderIndex = IndexOf(sender);
        SomeActionOnItemIndex(senderIndex);
    }
Run Code Online (Sandbox Code Playgroud)

如果我添加了接口代理,此代码将失败,因为发送方将是接口代理中的字段,而IndexOf(发送方)将返回-1.

.net c# castle-windsor inversion-of-control interceptor

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

我可以从ASP.NET应用程序外的ASP.NET页面对象中呈现html吗?

我不是在谈论使用'ApplicationHost'类托管ASP.NET.例如,如果我创建一个Console应用程序,创建一个有效的HttpContext对象并将其传递给自定义Page对象的ProcessRequest,它是否会填充HttpReponse html,就好像它在ASP.NET中运行一样?

.net c# asp.net httprequest httpcontext

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

如何在C#套接字服务器测试中正确模拟高延迟?

我有一个直接使用'System.Net.Sockets.Socket'进行网络通信的类,目前我使用以下两个接口来破坏对Socket类的依赖:

public interface ISocketListener
    {
        void Listen(int backlog);

        ISocket Accept();

        void Bind(EndPoint endpoint);               
    }

public interface ISocket
    {
        void Connect (EndPoint ep);

        Stream CommunicationStream { get; }

        void Close();

        void Close(int timeout);

        void Shutdown();
    }
Run Code Online (Sandbox Code Playgroud)

在生产实现中,我只是将所有方法调用重定向到私有Socket对象.在测试环境中,我使用MemoryStream作为套接字之间的通信"管道".由于我对这个主题没什么经验,所以在编写测试时我脑子里出现了一些问题:测试这种软件是否有"正式"的良好实践?在进行集成测试时,如何在多个连接/高延迟情况下测试此服务器的性能(更具体地说,如何模拟这些情况)?为什么有Socket.Accept/Socket.Receive的异步版本?我可以替换异步方法在单独的线程中处理它们的同步版本吗?

.net c# sockets testing

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

如何在Prolog中应用通用量词?

假设你有一个疾病诊断Prolog程序,从疾病和症状之间的许多关系开始:

causes_of(symptom1, Disease) :-
    Disease = disease1;
    Disease = disease2.
causes_of(symptom2, Disease) :-
    Disease = disease2;
    Disease = disease3.
causes_of(symptom3, Disease) :-
    Disease = disease4.

has_symptom(person1, symptom1).
has_symptom(person1, symptom2).
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建一个头部'has_disease(人,疾病)'的规则,如果该人患有该疾病的所有症状,该规则将返回true?使用上面的示例,以下是示例输出:

has_disease(person1, Disease).
   Disease = disease2.
Run Code Online (Sandbox Code Playgroud)

prolog

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

如何为python中实现的语言添加回溯/调试功能?

我正在使用python来实现另一种名为'foo'的编程语言.所有foo的代码都将被转换为python,并且也将在同一个python解释器中运行,因此它将JIT转换为python.

这是一小段foo的代码:

function bar(arg1, arg2) {
    while (arg1 > arg2) {
        arg2 += 5;
    }
    return arg2 - arg1;
}
Run Code Online (Sandbox Code Playgroud)

这将转化为:

def _bar(arg1, arg2):
    while arg1 > arg2:
        arg2 += 5
        watchdog.switch()
    watchdog.switch()
    return arg2 - arg1
Run Code Online (Sandbox Code Playgroud)

'watchdog'是一个greenlet(生成的代码也在greenlet上下文中运行),它将监视/限制资源使用,因为该语言将运行不受信任的代码.

从示例中可以看出,在生成python代码之前,将对解析树进行小的更改,以便添加看门狗开关并对函数标识符进行小的更改.

为了满足所有的要求,我还必须为该语言添加回溯/调试功能,这样当python运行时抛出异常时,用户将看到的是foo的代码追溯(因为选择显示生成的python代码追溯).

考虑用户使用以下内容创建名为"program.foo"的文件:

1  function bar() {
2      throw Exception('Some exception message');
3  }
4
5  function foo() {
6      output('invoking function bar');
7      bar();
8  }
9
10 foo();
Run Code Online (Sandbox Code Playgroud)

这将转化为:

def _bar():
    watchdog.switch()
    raise Exception('Some exception message')

def _foo():
    print 'invoking …
Run Code Online (Sandbox Code Playgroud)

python jit language-implementation

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

需要一种在SQL数据库中存储/查询json的有效方法

我正在实现一个服务,每个用户必须拥有自己的json/document数据库.除了让用户通过示例查询json文档之外,数据库还必须支持涉及多个文档的ACID事务,因此我放弃使用Couch/Mongo或其他NoSQL数据库(不能使用RavenDB,因为它必须在Unix系统上运行).

考虑到这一点,我一直试图找到一种在SQL数据库之上实现它的方法.这是我到目前为止所提出的:

CREATE TABLE documents (
  id INTEGER PRIMARY KEY,
  doc TEXT
);

CREATE TABLE indexes (
  id INTEGER PRIMARY KEY,
  property TEXT,
  value TEXT,
  document_id INTEGER
)
Run Code Online (Sandbox Code Playgroud)

每个用户都有一个包含这两个表的数据库,用户必须声明他需要查询哪些字段,以便系统可以正确填充"索引"表.因此,如果用户"A"将其帐户配置为按"名称"和"年龄"启用查询,则每次用户插入具有"名称"或"年龄"属性的文档时,系统也会将记录插入"索引" table,'property'列包含name/age,'value'将包含属性值,'document_id'将指向相应的文档.

例如,假设用户插入以下文档:

'{"name" : "Foo", "age" 43}'
Run Code Online (Sandbox Code Playgroud)

这将导致对'documents'表的插入以及对'indexes'表的两次插入:

INSERT INTO documents (id,doc) VALUES (1, '{"name" : "Foo", "age" 43}');
INSERT INTO indexes (property, value, document_id) VALUES ('name', 'foo', 1);
INSERT INTO indexes (property, value, document_id) VALUES ('age', '43', 1);
Run Code Online (Sandbox Code Playgroud)

然后,假设用户'A'向服务发送了以下查询:

'{"name": "Foo", "age": 43}' //(the queries are also json documents).
Run Code Online (Sandbox Code Playgroud)

此查询将转换为以下SQL: …

sql database acid nosql document-database

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

为什么v8会在生成的二进制文件中保存本机javascript的源代码?

我一直在研究v8源代码,尤其是'mksnapshot'工具如何在v8二进制文件中包含原生javascript文件(runtime.js,json.js ...)的编译图像,并注意到它还包括一个(有点)源的缩小版本.例如,在检查d8可执行文件的内容时,我看到以下代码段:

var $JSON=global.JSON;

function Revive(a,b,c){
var d=a[b];
if((%_IsObject(d))){
if((%_IsArray(d))){
var g=d.length;
Run Code Online (Sandbox Code Playgroud)

在'src/json.js'的开头我看到:

var $JSON = global.JSON;

function Revive(holder, name, reviver) {
  var val = holder[name];
  if (IS_OBJECT(val)) {
    if (IS_ARRAY(val)) {
      var length = val.length;
Run Code Online (Sandbox Code Playgroud)

很明显,两个片段都是等效的,但第二个片段在编译过程中转换为第一个片段.

我会理解是否包含原始代码用于检查'toString',但是当我在d8中输入'JSON.stringify'时,我看到的是'function stringify(){[native code]}',那么有什么意义呢?这个?

javascript v8 embedded-v8

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

为什么Tkinter文本小部件"滞后"更新以增加窗口高度?

我目前正在为neovim实现一个示例UI ,并决定使用Tkinter/python,因为平台的流行/简单.我遇到的问题是当窗口高度超过某个阈值时,tkinter似乎"堆叠"UI更新.

是一个显示问题的视频.

右侧窗口是运行neovim的终端仿真器,左侧窗口是连接到它的Tkinter UI程序.我们的想法是tkinter UI应该反映neovim终端屏幕,包括尺寸.在这个视频中,永远不要把注意力从终端窗口移开,因此Tk必须处理的唯一事件来自与neovim的连接(描述屏幕更新的虚拟'nvim'事件)

视频的第一部分显示,当窗口高度较小时,一切都很好,但是当我增加高度时开始滞后更新.

是Tkinter程序的代码.虽然neovim API是非常新的并且仍在大量开发中(代码可能对某些读者没有意义),但我认为我试图解决的问题是接近实现终端模拟器(使用Tk文本小部件):它必须处理大格式化文本的突发有效地更新.

我对GUI编程很缺乏经验.Tkinter是否是完成这项任务的明智选择?如果是,那么有人能给我一些我做错的提示吗?

为了解释发生了什么:Neovim API是线程安全的,并且vim.next_event()方法阻塞(没有忙等待,它使用下面的libuv事件循环)直到收到一个事件.

vim.next_event()调用返回时,它将通知Tkinter线程使用generate_event,它将执行实际的事件处理(它还缓冲事件之间redraw:startredraw:stop优化屏幕更新).

所以实际上有两个并行运行的事件循环,后台事件循环以线程安全的方式为Tkinter事件循环提供(该generate_event方法是可以从其他线程调用的少数几个之一)

python user-interface tk-toolkit tkinter neovim

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