我在node.js上实现了自己的Lisp,我可以像这样运行s表达式:
(assert (= 3 (+ 1 2))) (def even? (fn [n] (= 0 (bit-and n 1)))) (assert (even? 4)) (assert (= false (even? 5)))
现在我想添加宏 - defmacro功能 - 但这是我被卡住的地方.我想知道的宏系统是如何在其他的Lisp实现,但我无法找到许多指针(除了这个和这个).
我看过Clojure宏系统 - 我最熟悉的Lisp - 但这看起来太复杂了,我找不到我可以轻易应用的其他线索(Clojure宏最终编译成不适用的字节码对于javascript,我也无法理解这个macroexpand1功能.)
所以我的问题是:给定一个没有宏但带有AST的Lisp实现,如何添加像Clojure宏系统这样的宏系统?这个宏系统可以在Lisp中实现,还是在宿主语言的实现中需要额外的功能?
还有一句话:我还没有实现quote(')因为我无法弄清楚返回列表中应该包含哪种值.如果它包含AST的元件或类似的对象Symbol和Keyword(后者是用于Clojure的情况下)?
因此,昨天我在尝试将上游分支重新绑定到我的本地主题分支时发布了一些关于一些奇怪冲突的问题.
最后,我使用git rebase --merge upstream并解决了自上一次rebase以来我没有触及的文件中的大量冲突.
在这种情况下,我对rebase的理解是它将我的提交与该主题分支分离,应用来自上游分支的提交,然后在我的提交之上应用(作为补丁).因此,它最终成为一个快速前进的操作.我不明白的是......为什么我会与来自上游的提交合并冲突.这些也适用于补丁吗?我认为只是......在同一个分支的前一次提交之上"焊接"一些提交的行为?
我问这个是因为我没有触及的文件中有很多冲突.哦,我每天都会对这个上游分支进行重组.
UPDATE
我刚刚注意到从上游到我的主题分支的一些提交已经更改了SHA-1 id.有谁知道Git会对此做些什么?可能是--merge转换?
我的git版本是1.5.6.5
我的Hibernate下有MySQL,我也使用c3p0-0.9.1连接池.
在笔记本电脑上运行时(我的意思是在本地)我没有错误.但是当我在服务器上部署它时,我得到了这个异常:
com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
Run Code Online (Sandbox Code Playgroud)
这是我的堆栈跟踪:
root cause
com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319)
com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344)
$Proxy8.beginTransaction(Unknown Source)
com.hposg.domain.HPOSG.getItstance(HPOSG.java:56)
com.hposg.domain.Game.<init>(Game.java:43)
com.hposg.domain.GlobalGame.<init>(GlobalGame.java:12)
com.hposg.domain.SiteAdmin.createNewGame(SiteAdmin.java:18)
com.hposg.controller.struts.InitializingAction.execute(InitializingAction.java:45)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) …Run Code Online (Sandbox Code Playgroud) ^[^\x00-\x1F\x7F-\xFF]+$
Run Code Online (Sandbox Code Playgroud)
此正则表达式将无法匹配包含非打印(十六进制00-1f)或ASCII扩展字符(十六进制80-FF)的字符串,但与PHP不同,允许非ASCII utf-8字符通过.(例如,日本واستقرارهहिन्दीދިވެހިބަސްગુજરાતી한)
查看UTF-8上的维基百科页面,所有这些都应该在80-ff范围内.有谁知道我错过了什么?
此外,如果您可以解释如何忽略引用的文本,您将永远是我的英雄.
无论我在表单中放置什么,提交处理程序都会获得相同的表单值.为什么???????
function edit_schoolinfo_form() {
global $user;
$result = db_query("SELECT * FROM {db} where userid=%d", $user->uid);
$sas_school_info = db_fetch_array($result);
$form = array();
$form['school'] = array('#type' => 'fieldset', '#title' => t('School Information'), '#weight' => - 17,);
$form['school']['principlename'] = array('#type' => 'textfield', '#title' => t('Principle Name '), '#required' => TRUE, '#size' => 45, '#weight' => - 11, '#value' => $sas_school_info['principlename'],);
$form['school']['schoolname'] = array('#type' => 'textfield', '#title' => t('School Name '), '#required' => TRUE, '#size' => 45, '#weight' => - 10,'#value' => $sas_school_info['schoolname'],);
$form['school']['address1'] …Run Code Online (Sandbox Code Playgroud) 我曾使用工具打开并分析二进制文件.输出曾经是
insert into table1
update table4
insert into some_other_table
Run Code Online (Sandbox Code Playgroud)
它用于显示二进制文件中有多少个insert或update语句.知道服务器是否正在插入/删除记录或者是否发生了大量更新是很有用的.
我不记得该实用程序的名称.任何提示?
我有一个Web应用程序,我需要找到访问http请求对象的所有类(因为其中一个导致很难找到bug).因此我想在一些ServletRequest实现的方法中加入断点.然而,这个实现由Weblogic提供,我没有源代码.如何在没有源的情况下在特定方法中的任何地方放置断点.Eclipse IDE是首选.
是否有一些创新方法可以缩短"印刷"时间而不会产生太多混淆?您最喜欢哪种"印刷品"?
define('_','_');
function _j($a, $b) {
return $a._.$b;
}
// Output 0_0
print (0)._.(0);
print _j(0,0);
Run Code Online (Sandbox Code Playgroud)
更新
我想要做的是将Python/Ruby中的切片语法转换为PHP,例如.
a[1:3]
a[1,3]
a[1..3]
Run Code Online (Sandbox Code Playgroud)
要使它成为PHP你需要这样引用$a["1:3"]($ a是一个带有ArrayAccess接口的类)所以我在想是否有其他的,$a[(0)._.(0)]这太长了.
我注意到facebook为每个元素都有随机元素ID - 包括没有唯一元素id的元素.
<div id="__w2_YvdN1r2_loading">blah</div>
Run Code Online (Sandbox Code Playgroud)
任何想法为什么他们在每个元素上做这个以及他们如何做到这一点?
我无法在用户的浏览器上可靠地设置Etag.当用户点击我的一个外部链接时,我想将文章ID设置为他们的Etag(我也使用cookie,但我喜欢尝试使用Etag专门测试其可靠性).
几个小时/天之后,当同一个用户返回我的网站时,我希望能够阅读Etag值并将其用于内容.
我可以在初始点击时设置Etag,但是当用户返回时,Etag值就消失了.我认为它已过期或其他东西.这是我一直在尝试的代码:
<?
$time = 1280951171;
$lastmod = gmdate('D, d M Y H:i:s \G\M\T', $time);
$etag = '123';
$ifmod = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $lastmod : null;
$iftag = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] == $etag : null;
if (($ifmod || $iftag) && ($ifmod !== false && $iftag !== false)) {
header('HTTP/1.0 304 Not Modified');
} else {
header("Last-Modified: $lastmod");
header("ETag: $etag");
}
print_r($_SERVER);
?>
Run Code Online (Sandbox Code Playgroud)