我运行rake任务时是否执行了config/initializers的脚本?
我有一个具有常量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) 我定义了一个简单的类:
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,因为这只是一个更复杂的用例的摘录.)
我有一个带有静态工厂方法的类.我想调用工厂来检索类的实例,然后通过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++代码不能在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++ 11特性)必须用花括号括起来或跟在=符号后面.它们可能未在括号内指定.
这是什么原因?
除了标准[[MyClass alloc] init]模式,一些对象是由静态方法构建的MyClass *obj = [MyClass classWithString:@"blabla"]
根据广泛的内存管理指南(包括Apple的),您只负责释放您的对象alloc.
有人能为我提供这种方法的模板吗?你如何返回分配的对象([self alloc]; return self;也许)?你如何确保它将被释放?
根据上一个问题的建议,我将后台进程放在名为scheduler.rb的初始化程序中.但是,我很难将新安排的进程记录到Rails日志中.我是否有一种简单的方法可以从初始化程序访问相同的日志,最好是访问Rails的默认记录器方法(logger.info等)?
我想在我的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
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未被初始化但用作算术运算的变量.
initializer ×10
c++ ×2
swift ×2
c# ×1
c++11 ×1
class-method ×1
curly-braces ×1
factory ×1
for-loop ×1
logging ×1
object ×1
objective-c ×1
python ×1
python-3.x ×1
rake-task ×1
routes ×1
scope ×1
self ×1
tensorflow ×1