我有一个用户类,我试图附加工厂创建的配置文件.这是班级:
class User < ActiveRecord::Base
acts_as_authentic
has_one :profile
after_create {self.profile = ProfileFactory.create_profile(self.role)}
end
Run Code Online (Sandbox Code Playgroud)
工厂看起来像这样
class ProfileFactory
def self.create_profile(role)
String s = "#{role}#{"Profile"}"
Object.const_get(s).new
end
end
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不承认自己是一个用户.这是我在进行ProfileFactory.create_profile调用时遇到的错误
未定义的方法'角色'
#<Class:0x2304218>
用户对象具有以下角色:在其迁移中声明的字符串.
任何帮助表示赞赏谢谢.
这是代码:
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
Run Code Online (Sandbox Code Playgroud)
为什么要使用它,如果你可以使用更直观的东西,如:
SAXParser mySAXParser = new SAXParser();
Run Code Online (Sandbox Code Playgroud) 我试图了解一个典型的软件项目的概念,但我找不到一篇关于这个的好文章.
什么是util类?
它们之间的主要区别是什么?(例如,什么使工厂不是服务等)
软件项目中是否还有其他常见的概念?
在Python 2.7.5中:
from threading import Event
class State(Event):
def __init__(self, name):
super(Event, self).__init__()
self.name = name
def __repr__(self):
return self.name + ' / ' + self.is_set()
Run Code Online (Sandbox Code Playgroud)
我明白了:
TypeError:调用元类base
函数时出错()参数1必须是代码,而不是str
为什么?
我所知道的关于线程的一切.事件我从以下网站学习:http://docs.python.org/2/library/threading.html?highlight = threading # event-objects
当它说threading.Event()是类threading.Event ???的工厂函数时它是什么意思?(呃......看起来对我很平常).
我正在研究jQuery UI Widget,但我遇到了一些问题.这是我实例化插件的方式.
$('#myId0, #myId1').mywidgetname();
Run Code Online (Sandbox Code Playgroud)
这是我的插件代码:
;(function ( $, window, document, undefined ) {
$.widget( "namespace.mywidgetname" , {
_create: function(){
debugger;
this._myPrivateProperty = 2;
....
Run Code Online (Sandbox Code Playgroud)
问题是,当调试器第二次停止时,我已经将this._myPrivateProperty实例化为值2.我认为该小部件将被实例化两次,但事实并非如此.
另外,如果我为每个元素指定不同的选项,如下所示:
$('#myId0').mywidgetname({myVarA: 'someText'});
$('#myId1').mywidgetname({myVarB: 'someText'});
Run Code Online (Sandbox Code Playgroud)
变量this.options对于每个变量都是不同的.现在有人如何将"私人"财产私有化?
谢谢
我是棱角分明的新手,我正在创建一个简单的应用程序.它在项目之间导航,通过JSON拉入:
http://plnkr.co/edit/FTfa1rcVaf85xTu65oSR?p=preview
我也在使用工厂,在那里我打电话,get或者getOne,这样它$http在一个地方处理,只有在数据尚未被提取的情况下才调用它.
当你在主页上开始时这一切都很好,但是当你在一个单独的项目页面上开始时,两个get并且同时getOne被调用,拉入重复的数据.您可以通过在其自己的窗口中打开Plunker并转到诸如的URL来测试/#/projects/1.
我知道为什么会这样,我只是无法弄清楚如何阻止它.
有没有一个简单的解决方案或我是否完全错误的方式?
谢谢参观.
我正在寻找许多方法来实现Java中的Factory模式,但仍然找不到一个完美的方法,如果/ switch plus不使用反射,则不会受到影响.我找到的最好的一个是Tom Hawtin在这里的答案:https://stackoverflow.com/a/3434505/1390874
但我最担心的是它将匿名类的HashMap存储在内存中.
问题是除了Tom Hawtin的答案之外,人们还会考虑使用Class.newInstance()吗?这样可以避免我们在内存中存储不必要的匿名类吗?加上代码会更干净.
它看起来像这样:
class MyFactory {
private static final Map<String,Class> factoryMap =
Collections.unmodifiableMap(new HashMap<String,Class>() {{
put("Meow", Cat.class);
put("Woof", Dog.class);
}});
public Animal createAnimal(String action) {
return (Animal) factoryMap.get(action).newInstance();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用faker.js库生成随机数据,我有几个工厂函数生成一系列用户数据:
const createUser = () => {
return {
name: faker.name.findName(),
email: faker.internet.email(),
address: faker.address.streetAddress(),
bio: faker.lorem.sentence(),
image: faker.image.avatar()
}
}
const createUsers = (numUsers = 5) => {
return Array(numUsers).fill(createUser());
}
let fakeUsers = createUsers(5)
console.log(fakeUsers)
Run Code Online (Sandbox Code Playgroud)
这种Array.fill方法的问题在于它返回相同的数据n次数.我希望从我的工厂退回5个不同的用户.
我该怎么做呢?
我以为我完全理解了Symfony的自动装配行为,但肯定有一些我想念的东西,希望有人能填补空白。
首先要解决三个问题:
services.yaml文件中的服务定义?我在使用setter注入的捆绑软件中有一个服务定义,但是当我要求Symfony自动捆绑我的捆绑软件服务,甚至当我要求Symfony从自动装配中排除服务时,Symfony似乎会完全忽略它。
我的应用程序正在使用Symfony v4.1.3。
我已将Bundle包含在我的应用程序bundles.php文件中。
<?php
return [
//... core bundles,
Acme\\Symfony\\AcmeCustomBundle\\AcmeCustomBundle::class => ['all' => true]
];
Run Code Online (Sandbox Code Playgroud)
在defaultSymfony应用程序services.yaml文件中,我已要求Symfony使用以下内容自动捆绑服务:
Acme\Symfony\AcmeCustomBundle\:
resource: '../vendor/acme-symfony/custom-bundle/*'
exclude: '../vendor/acme-symfony/custom-bundle/{Model,Tests}'
Run Code Online (Sandbox Code Playgroud)
在services.yaml位于中的捆绑文件中../vendor/acme-symfony/custom-bundle/Resources/config/services.yaml,我具有以下内容:
parameters:
services:
Acme\Symfony\AcmeCustomBundle\Search\ConfigurationReader:
calls:
- method: setIndex
arguments:
$index: '%elasticsearch.index%'
- method: setSchema
arguments:
$schema: '%elasticsearch.schema%'
Run Code Online (Sandbox Code Playgroud)
这些参数是在我的bundle扩展类中设置的(扩展可配置扩展名),并且我已经验证了这些参数确实存在并且正在使用以下方法进行设置:
$container->setParameter('elasticsearch.index', $mergedConfigs['elasticsearch']['index']);
$container->setParameter('elasticsearch.schema', $mergedConfigs['elasticsearch']['schema']);
Run Code Online (Sandbox Code Playgroud)
现在回到问题所在。即使我通过以下操作告诉Symfony不要自动装配以上服务,Symfony也不会执行setter注入:
Acme\Symfony\AcmeCustomBundle\:
resource: '../vendor/acme-symfony/custom-bundle/*'
exclude: '../vendor/acme-symfony/custom-bundle/{Model,Tests,Search}'
Run Code Online (Sandbox Code Playgroud)
但是,当我使用Symfony时,确实可以配置我的服务
这种回答回答了我上面的第二个问题,但我不是100%确信。尽管如此,我宁愿不必使用工厂类来解决Symfony可能存在的问题,或者我对二传手注入/自动装配的工作原理缺乏了解。
谁能看到我显然想念的东西?
我一直感到困惑,因为我发现以下两个案例的结果与我预期的不同;
console.log(typeof document.querySelector('.holder'));
console.log(typeof $('.holder'));
Run Code Online (Sandbox Code Playgroud)
浏览器说这2种情况是相同的变量类型,即object。但是,当我尝试添加.each方法时,它说document.querySelector('.holder')不是函数。
console.log(typeof document.querySelector('.holder'));
console.log(typeof $('.holder'));
Run Code Online (Sandbox Code Playgroud)
'use strict'
const createMenuTable = (root, clips) => {
return root.each(() => {
console.log(root);
})
}
let myTable = createMenuTable(
document.querySelectorAll('.table'),
document.querySelector('.layerGroup')
); // When I change the `root` argument to the `$('.table')`, it runs w/o an error.Run Code Online (Sandbox Code Playgroud)
未捕获的TypeError:root.each不是一个函数
我的目标是element像使用jQuery一样使用普通JavaScript 获得一个函数,但不知道如何解决此问题。
值得赞赏的是有人可以向我解释为什么这两个案例即使变量类型相同也不能给出相同的结果。