标签: initializer

Rails是否为rake任务运行初始值设定项?

我运行rake任务时是否执行了config/initializers的脚本?

ruby-on-rails initializer rake-task

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

需要self来在init中设置swift类的所有常量

我有一个具有常量ivar的Swift类(它们现在被称为实例常量吗?).要将值设置为此常量,我需要调用所需对象的初始化程序并传递自身.但是,我不被允许,因为我需要首先初始化所有值,然后调用super.init(),之后我被允许访问self.那么在这种情况下该怎么办?

class Broadcaster: NSObject, CBPeripheralManagerDelegate {

    let broadcastID: NSUUID
    let bluetoothManager: CBPeripheralManager

    init(broadcastID: NSUUID) {
        self.broadcastID = broadcastID

        let options: Dictionary<NSString, AnyObject> = [ CBPeripheralManagerOptionShowPowerAlertKey: true ]
        self.bluetoothManager = CBPeripheralManager(delegate: self, queue: nil, options: options) // error: 'self' used before super.init call

        super.init()
    }
}
Run Code Online (Sandbox Code Playgroud)

self initializer swift

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

如何满足包含初始化程序的协议?

我定义了一个简单的类:

class MyClass {
    var name:String?

    required init() {
        println("init")
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在这样的扩展中添加一个新的初始化程序:

extension MyClass {
    convenience init(name: String) {
        self.init()
        self.name = name
    }
}
Run Code Online (Sandbox Code Playgroud)

一切正常.

但是只要我在协议中定义新的初始化程序:

protocol MyProtocol {
    init(name:String)
}
Run Code Online (Sandbox Code Playgroud)

并让我的扩展确认该协议:

extension MyClass : MyProtocol {
    convenience init(name: String) {
        self.init()
        self.name = name
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

初始化程序要求'init(name :)'只能通过required非final类'MyClass'定义中的初始化程序来满足

这里发生了什么?

(顺便说一句:我不能上课final,因为这只是一个更复杂的用例的摘录.)

initialization initializer swift

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

是否可以使用工厂方法使用ac#object initializer?

我有一个带有静态工厂方法的类.我想调用工厂来检索类的实例,然后通过c#object initializer语法进行额外的初始化:

MyClass instance = MyClass.FactoryCreate()
{
  someProperty = someValue;
}
Run Code Online (Sandbox Code Playgroud)

VS

MyClass instance = MyClass.FactoryCreate();
instance.someProperty = someValue;
Run Code Online (Sandbox Code Playgroud)

c# factory object initializer

26
推荐指数
3
解决办法
4632
查看次数

我可以在for循环的初始化中声明不同类型的变量吗?

为什么这个C++代码不能在VS2010下编译:

for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)

虽然这个做了:

short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)

是否禁止在for-loop初始化程序中声明两个不同类型的变量?如果是这样,你怎么解决它?

c++ scope for-loop initializer variable-declaration

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

为什么类内初始值设定项只能使用=或{}?

类内初始值设定项(C++ 11特性)必须用花括号括起来或跟在=符号后面.它们可能未在括号内指定.

这是什么原因?

c++ initializer curly-braces c++11

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

创建新实例的类方法

除了标准[[MyClass alloc] init]模式,一些对象是由静态方法构建的MyClass *obj = [MyClass classWithString:@"blabla"]

根据广泛的内存管理指南(包括Apple的),您只负责释放您的对象alloc.

有人能为我提供这种方法的模板吗?你如何返回分配的对象([self alloc]; return self;也许)?你如何确保它将被释放?

memory-management objective-c initializer class-method

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

如何从初始化程序访问Rails记录器?

根据上一个问题的建议,我将后台进程放在名为scheduler.rb的初始化程序中.但是,我很难将新安排的进程记录到Rails日志中.我是否有一种简单的方法可以从初始化程序访问相同的日志,最好是访问Rails的默认记录器方法(logger.info等)?

logging ruby-on-rails initializer

18
推荐指数
3
解决办法
8944
查看次数

在加载*路由后运行*的Rails初始化程序?

我想在我的Rails应用程序启动时设置一个类属性.它需要检查一些路由,因此需要在我的自定义代码运行之前加载路由.我无法找到一个可靠的地方.

这在"测试"环境中完美地工作:

config.after_initialize do
  Rails.logger.info "#{Rails.application.routes.routes.map(&:path)}"
end
Run Code Online (Sandbox Code Playgroud)

但它并没有在"发展"的环境中工作(路线是空的)

现在,我似乎通过运行config.to_prepare我理解在每个请求之前发生的相同代码,让事情在开发模式下工作.不幸的是,to_prepare单独使用似乎不能在测试模式下工作,因此重复.

我很好奇为什么在测试模式中after_initialize之前加载路由,而不是在开发模式下.真的,最好的钩子是什么?是否有一个适用于所有环境的钩子?

*编辑*

穆的建议重新加载路线很棒.它使我能够在所有环境中对after_initialize内的路径进行一致的访问.但是对于我的用例,我认为我仍然需要运行to_prepare中的代码,因为我在模型上设置了一个类属性,并且在每个请求之前重新加载模型.

所以这就是我最终做的事情.

[:after_initialize, :to_prepare].each do |hook|
  config.send(hook) do
    User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
  end 
end 
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有些混乱.我想我宁愿这样做:

config.after_initialize do
  User.exclude_routes_from_usernames!
end

config.to_prepare do
  User.exclude_routes_from_usernames!
end
Run Code Online (Sandbox Code Playgroud)

但我不确定是否User适合进行检查Rails.application.routes.我想我可以用lib /中的代码做同样的事情,但我不确定这是否正确.

另一个选择是在to_prepare上应用mu的建议.这样可行,但是在我的开发环境中每次请求都重新加载路由似乎有明显的延迟,所以我不确定这是否是一个好的呼叫,尽管它至少是干的.

config.to_prepare do
  Rails.application.reload_routes!
  User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
end
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails initializer ruby-on-rails-3 ruby-on-rails-3.1

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

当实际需要global_variables_initializer()时

import tensorflow as tf
x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
# model = tf.global_variables_initializer()
with tf.Session() as session:
        print("x = ", session.run(x)) 
        # session.run(model)
        print("y = ", session.run(y))
Run Code Online (Sandbox Code Playgroud)

我无法理解何时global_variables_initializer()需要.在上面的代码中,如果我们取消注释第4和第7行,我可以执行代码并查看值.如果我按原样运行,我会看到崩溃.

我的问题是它正在初始化哪些变量.x是一个不需要初始化的常量,是一个y未被初始化但用作算术运算的变量.

python initializer python-3.x tensorflow

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