标签: initializer

事件默认初始值设定项

我曾经使用以下内容:

public event EventHandler OnComplete = delegate { };
Run Code Online (Sandbox Code Playgroud)

我不确定,这是如何调用的,这是一个“事件默认初始化程序”吗?

但问题似乎是当我从 EventArgs 派生、创建自己的 EventHandler 并决定使用相同的方法时。请参见:

public class MyEventArgs : EventArgs
{
    int result;
    public int Result
    {
        get
        {
            if (exceptionObject == null)
                return result;
            else
                throw new InvalidOperationException();
        }
        internal set { result = value; }
    }

    Exception exceptionObject;
    public Exception ExceptionObject
    {
        get { return exceptionObject; }
        internal set { exceptionObject = value; }
    }
}

public delegate EventHandler MyEventHandler(object sender, MyEventArgs e);

public class MyOperation
{
    public …
Run Code Online (Sandbox Code Playgroud)

c# events delegates initializer

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

在类 X 的 __new__ 方法中取消类型 X 的对象在返回取消取消的对象时调用 __init__ ,为什么?

我有一个对象,它将在第一次使用后被缓存。我将使用 cPickle 模块来完成此操作。如果模块已经缓存,当我尝试下次(在另一个进程中)实例化该对象时,我想使用缓存的对象。以下是我的基本结构:

import cPickle
class Test(object):
    def __new__(cls, name):
        if name == 'john':
            print "using cached object"
            with open("cp.p", "rb") as f:
                obj = cPickle.load(f)
                print "object unpickled"
                return obj
        else:
            print "using new object"
            return super(Test, cls).__new__(cls, name)
    def __init__(self, name):
        print "calling __init__"
        self.name = name
        with open("cp.p", "wb") as f:
            cPickle.dump(self, f)
Run Code Online (Sandbox Code Playgroud)

问题是,当我在__new__方法中取消缓存的对象时,它会调用__init__并重新初始化所有内容。有趣的是,似乎__init__不是在 unpickle 之后调用,而是在返回 unpickle 对象时调用。我添加了一个打印语句来显示这一点(“对象未腌制”)。

我有一个 hacky 解决方法,将以下检查添加到__init__

intiailzed = False
...
...
def __init__(self, name): …
Run Code Online (Sandbox Code Playgroud)

python constructor caching initializer pickle

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

初始化表达式是D中构造函数的一部分吗?

在D中,我可以直接在声明上初始化并期望初始化表达式是构造函数的一部分吗?我来自C#,就是这样.但随着DMD 2.071.0我得到其他行为.

class Other { }

class Test { Other nonStaticMember = new Other; }

void test()
{
    auto t1 = new Test;
    auto t2 = new Test;
    // Assert is failing, the two Test instances are 
    // being initialized to the same reference
    // instead of execute the Other constructor twice.
    assert(t1.nonStaticMember !is t2.nonStaticMember);
}
Run Code Online (Sandbox Code Playgroud)

如果这是意图行为,应在此处记录:https://dlang.org/spec/class.html 对吗?

d class initializer dmd

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

为什么带括号 () 的数组初始化被编译器标记为错误?

我正在研究 C++ 中的初始化语法,根据cppreference,有三种可能的编写方式,1)括号,2)等号,3)大括号。

尝试使用 1) 括号语法初始化数组时,遇到错误。

int test() {
    int a[](1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Compiler Explorer 上测试,我从 clang 11.0.0 获得

error: array initializer must be an initializer list
        int a[](1);
            ^
Run Code Online (Sandbox Code Playgroud)

同样,在与 gcc 10.2 相同的站点上

error: array must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)

现在,我知道如何使用大括号来初始化数组而不会出错。但这不是这个问题的重点。

我正在寻找与此报告的错误对应的 C++ 标准。

我正在查看这个标准草案timsong-cpp(应该在 C++ 20 时代左右)。“(17.1) If the initializer is a (non-parenthesized) brad-init-list or is =braced-init-list, ...”一节讨论了花括号列表——不是我们的情况。

然后有一段“(17.5)否则,如果目标类型是数组,则对象初始化如下……”

我认为这应该涵盖我们的情况。它是关于数组的初始化,它也是一个“其他”部分,这意味着它不会谈论花括号列表。它可以谈论 1) 括号或 2) 等号,但从进一步的文本中我们看到它需要一个表达式列表:

“让 x1, ..., xk 是表达式列表的元素。”

使用 …

c++ arrays standards initializer language-lawyer

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

属性“filteredOptions”没有初始值设定项,并且未在构造函数中明确分配

在我的 Angular 应用程序中,我有一个组件:

  filteredOptions: Observable<string[]>;

Run Code Online (Sandbox Code Playgroud)

以下行给出错误:

Property 'filteredOptions' has no initializer and is not definitely assigned in the constructor.

28   filteredOptions: Observable<string[]>;
Run Code Online (Sandbox Code Playgroud)

javascript initializer node.js observable angular

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

@ViewChild - Angular 13 上的初始化错误

我正在 Angular 13 中创建应用程序。我想调用from 、 usingshow()的方法,但出现错误。旧的问题和答案在这种情况下不起作用。ChildComponentParentComponent@ViewChild

家长

<app-child #child></app-child>
Run Code Online (Sandbox Code Playgroud)
@ViewChild('child') child: ChildComponent;

showChild() {
   this.child.show();
}
Run Code Online (Sandbox Code Playgroud)

孩子

show(){
  console.log('show');
}
Run Code Online (Sandbox Code Playgroud)

错误:

属性“child”没有初始值设定项,并且未在构造函数中明确分配。


解决方案一:

家长

@ViewChild('child') child!: ChildComponent;
Run Code Online (Sandbox Code Playgroud)

错误:

类型错误:无法读取未定义的属性(读取“显示”)


解决方案2:

家长

@ViewChild('child') child: ChildComponent = new ChildComponent;
Run Code Online (Sandbox Code Playgroud)

没有错误 工作正常,但我怀疑这是否正确?

initializer parent-child viewchild angular angular13

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

初始化表达式怎么可能是语法中的“赋值表达式”?

我有这个代码示例:

struct S {};

S s = S();
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我看到s = S()声明中S s = S()是一个init-declarator,其中s是 a declarator,并且= S()是一个初始化器

另外,我看到初始化程序( = S()) 是一个大括号或等于初始化程序,即"=initializer-clause"。这意味着最终这S()是一个初始化子句

根据语法,初始化子句要么是赋值表达式,要么是大括号初始化列表。事实上,S()可能不是一个花括号初始化列表,但它可能是一个赋值表达式。

如果到目前为止我的分析是正确的,那么我有一个问题:

赋值S()表达式如何?表达式中的赋值运算符在哪里?S()

换句话说,赋值表达式的语法是:

assignment-expression:
      conditional-expression
      yield-expression
      throw-expression
      logical-or-expression assignment-operator initializer-clause
Run Code Online (Sandbox Code Playgroud)

怎么S()可能是上述之一?

类似地, throw 表达式 …

c++ expression initializer language-lawyer

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

python多处理 - 初始化/传递数据库连接以跨进程使用的最佳方法

我在使用Python多处理包中的pool.map传递数据库连接对象或游标对象时遇到了一些困难.基本上,我想创建一个工作池,每个工作池都有自己的状态和数据库连接,这样它们就可以并行执行查询.

我尝试过这些方法,但是我在python中得到了一个picklingerror -

游泳池地图与2个arugements

使用Initializer设置多进程池

第二个链接正是我需要做的,这意味着我希望每个进程在启动时打开数据库连接,然后使用该连接来处理传入的数据/ args.

这是我的代码.

import multiprocessing as mp

def process_data((id,db)):
  print 'in processdata'
  cursor = db.cursor()
  query = ....
  #cursor.execute(query)
  #....
  .....
  .....
  return row

`if __name__ == '__main__':

  db = getConnection() 
  cursor = db.cursor() 
  print 'Initialised db connection and cursor'
  inputs = [1,2,3,4,5]
  pool = mp.Pool(processes=2)
  result_list = pool.map(process_data,zip(inputs,repeat(db)))
  #print result_list
  pool.close()
  pool.join() 
Run Code Online (Sandbox Code Playgroud)

`

这会导致以下错误 -

`Exception in thread Thread-1:
  Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.6/threading.py", line …
Run Code Online (Sandbox Code Playgroud)

python database pool initializer multiprocessing

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

登录后同步注入当前用户

在我的EmberJS应用程序中,我有一个当前的用户初始化程序,它将用户注入所有控制器,路由和视图.它在登录时效果很好.我需要同步加载当前用户对象,这样我就可以立即检查一些用户权限.

这是我的初始化程序:

App.CurrentUserInitializer - Ember.Initializer.extent({

    name: 'current-user',
    after: 'authentication',

    initialize: function(container, app) {

      var store = container.lookup('store:main');

      app.deferReadiness();

      store.find('user', 'me').then(function (user) {

        app.register('session:user', user, {instantiate: false});

        _.forEach(['route', 'controller', 'view'], function (place) {
          app.inject(place, 'currentUser', 'session:user');
        });

        app.advanceReadiness();

      }).catch(function () {
        app.advanceReadiness();
      });
    }
});
Run Code Online (Sandbox Code Playgroud)

这对我来说是崩溃的,是在登录期间.应用程序启动时,将运行初始化程序,但/users/me路径返回401错误.如果我没有捕获错误和advanceReadiness,则启动暂停.通过捕获错误,应用程序启动,但登录后初始化程序不会再次运行,因此不会加载当前用户.

我有什么选择?我不能使用@ marcoow推荐的向Session添加计算属性的方法,因为我需要在启动时加载用户.

我已经尝试强制将IndexRoute上的用户对象加载为hack,但这似乎不起作用.

任何提示都表示赞赏.

initializer ember.js ember-simple-auth

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

struct member'Instrateizer元素不是编译时常量'

struct S {
   int a;
};

int a = ((struct S) {8}).a;
Run Code Online (Sandbox Code Playgroud)

编译器报告错误"初始化元素不是编译时常量",为什么?

c struct initializer

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