我正在使用clisp,我想知道是否有任何我可以使用的具有可设置版本的nthcdr的库.
我想要做:
var MyModel = Backbone.model.extend({
someProp: { ... },
.
.
});
Run Code Online (Sandbox Code Playgroud)
但要
new MyModel().someProp === new MyModel().someProp回来了false
好像我做了
function MyModel() {
this.someProp = {...};
}
Run Code Online (Sandbox Code Playgroud)
我不想把赋值this.someProp = {...};放在initialize方法中,因为如果我将MyModel子类化,我将不得不再次在子类的initialize方法中重复赋值,或者记得每次从子类初始化时都要调用父类初始化,这似乎是我作为一种解决方法而不是解决方案.那么,还有其他方法吗?
什么是(如果有的话)隐含的假设或限制以及设计的差异如下:
在他的:
class SampleClass1
{
IWorker workerA;
IWorker workerB;
void setWorkerA(IWorker w);
void setWorkerB(IWorker w);
WorkResult doWork();
}
Run Code Online (Sandbox Code Playgroud)
B)与此相对:
class SampleClass2
{
WorkResult doWork(IWorker workerA, IWorker workerB);
}
Run Code Online (Sandbox Code Playgroud)
我知道这取决于具体项目,但如果上面的类是小框架的一部分怎么办?第一个类能够维持状态并更自然地分离步骤但是第二类确保与外部调用者的"实时通信"更自然,因为每次调用doWork()时都传递Worker.
是否有任何建议的用法或通用实践指导上述两种方式之间的选择?谢谢.
当我配置hibernate连接到数据库并且由于某种原因连接失败时,我注意到它既没有在构建工厂时出现任何异常(这是可接受的),也没有在我调用sessionFactory.openSession()时(这是不可接受的) .更令人讨厌的是session.isConnected()在调用sessionFactory.openSession()后返回true.(这是完全不可接受的).
直到那一刻告诉我它没有连接到数据库的唯一提示是由java.sql.SQLException引起的WARN日志条目,它在内部捕获并且只是发送到记录器.除了创建一个伪事务来强制异常,还有其他方法来获取连接状态吗?(也许配置中的一个选项说"不要记录失败的连接尝试,但抛出一个hibernate异常).我搜索过但没找到任何东西.非常感谢.
如果可能的话,我正在寻找一个普通的lisp impl.(另外,我不想将sexp转换为XML并在结果上使用xpath.)
两个问题:
1.我想要一个函数在列表中就地插入一个元素(在任何位置但是列表的开头,参见问题2的原因),这样:
CL> (defun insert-in-place (the-list after-position new-element) .... ) => ...
CL> (setf testy-list (list 'a 'b 'c 'd)) => ...
CL> testy-list => ('A 'B 'C 'D)
CL> (insert-in-place testy-list 1 'BOOOO) => ...
CL> testy-list => ('A 'B 'BOOOO 'C 'D)
Run Code Online (Sandbox Code Playgroud)
2.我认为通过函数将元素插入到列表的开头是不可能的,因为args是通过值传递的,所以由于传递了列表的第一个cons单元格,所以它是按值传递的,它是一个副本,所以改变它的汽车只改变一个复制车,而不是原来的,虽然以下的利弊细胞是共享的,可以改变到位.我对么?
在Common lisp中:重新定义范围内的现有函数?OP要求类似的东西.但是我想创建一个方法专用器,而不是一个函数.基本上假设一个方法定义如下:
defmethod my-meth ((objA classA) (objB classB)) (...)
Run Code Online (Sandbox Code Playgroud)
我想做的是(伪代码):
(labels ((my-meth ((objA classA) (objB (eql some-object)))))
do stuff calling my-meth with the object...)
Run Code Online (Sandbox Code Playgroud)
真正的用途是我想创建一个临时环境,setf slot-value-using-class专门用于eql创建特定对象的插槽写入的按需拦截.(目的是记录旧的和新的槽值,然后调用next方法.)我不想创建元类,因为我可能想拦截已经实例化的标准对象.
当然我尝试了它并且它没有用(因为你是怎么做DEFMETHOD的LABELS?)但我想要一些更有经验的人来验证它是不可行的和/或提出合适的方式.
评论?
编辑:
Daniel和Terje提供了很好的链接,可以扩展我对可能性的认识,但是我想在去那里之前更多地寻求更加普遍的方法.我一直在研究在进入环境时做一个add-method,它将专注于eql,并在退出时执行remove-method.我还没完呢.如果有人玩过那些,评论会很好.将使线程保持最新.
编辑2:我接近使用add-method场景,但是有一个问题.这是我尝试过的:
(defun inject-slot-write-interceptor (object fun)
(let* ((gf (fdefinition '(setf sb-mop:slot-value-using-class)))
(mc (sb-mop:generic-function-method-class gf))
(mc-instance (make-instance (class-name mc)
:qualifiers '(:after)
:specializers (list (find-class 't)
(find-class 'SB-PCL::STD-CLASS)
(sb-mop::intern-eql-specializer object)
(find-class 'SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION))
:lambda-list '(new-value class object slot)
:function (compile nil (lambda (new-value class …Run Code Online (Sandbox Code Playgroud) 启动swank服务器时,没有设置要绑定的地址的参数:
* (describe 'swank:create-server)
=> ...
Lambda-list: (&KEY (PORT DEFAULT-SERVER-PORT)
(STYLE *COMMUNICATION-STYLE*) (DONT-CLOSE *DONT-CLOSE*)
(CODING-SYSTEM *CODING-SYSTEM*))
...
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
根据INTERSECTION功能的CLHS条目(http://www.lispworks.com/documentation/HyperSpec/Body/f_isec_.htm):
对于满足测试要求的每一对,该对中的两个元素中 的一个将被放入结果中.
我的问题是我需要知道结果中的两个元素中的哪一个将被放入结果中,这很重要,例如 :key #'car 用于提取参数以进行测试,因为cdr可能不同.我想保证始终将第一个元素或第二个元素放在结果中.我错过了什么或者这只是未指明的行为,所以我不应该将它用于我的案例?
是否有可能在模型中拥有私有属性?就像(构造函数)函数中的本地声明的变量一样,没有附加到this,但只在(构造函数)函数中定义的任何内容声明为本地和可见.没有BB视图的示例:
function MyView(aModel){
var $internalInput = $('<input>');
this.render: function($where){
$internalInput.val(aModel.get('SomeProperty'));
$where.append($('<div class="inputWraper">').append($internalInput));
};
this.toggleReadonly: function() {
toggle $internalInputs readonly attribute
}
...
+ Code to bind input.val to some aModel property(ies) and setup events
...
}
Run Code Online (Sandbox Code Playgroud)
请注意, internalInput外部世界无法访问,aModel也无法访问(至少通过MyView).所以如果我想使用Backbone.View来实现上面的MyView,我该如何做并保持$ internalInput'private'?
common-lisp ×5
lisp ×5
backbone.js ×2
javascript ×2
class-design ×1
clisp ×1
clos ×1
hibernate ×1
java ×1
mop ×1
private ×1
s-expression ×1
slime ×1
swank ×1
xml ×1
xpath ×1