小编jne*_*ira的帖子

别名comp为º,部分为¬在clojure中

我错过了一个简短的语法来表达对Clojure函数的基本操作.正因为如此,我开始使用º作为速记comp(因为它是更接近数学运算符,但交通方便),并¬partial(因为缺少提醒参数的我).

你对此有何看法?是否有用或者是否存在使代码混淆的风险?

conventions clojure

5
推荐指数
1
解决办法
265
查看次数

clojure"官方"并发示例(使用锁,原子,stm)的可能改进

我试图让clojure并发的"官方"示例更接近使用手动锁定的java版本.在这个要点中,我将java和clojure代码以及所有版本的VisualVm配置文件的线程转储.这是clojure代码和时间

(ns simple-example (:gen-class))
(set! *warn-on-reflection* true)
;; original from: http://clojure.org/concurrent_programming
(import '(java.util.concurrent Executors Future)
SimpleLocking$Node)

(defn test-concur [iter refs nthreads niters]
  (let [pool (Executors/newFixedThreadPool nthreads)
        tasks (map (fn [t]
                      (fn []
                        (dotimes [n niters]
                          (iter refs t))))
                   (range nthreads))]
    (doseq [^Future future (.invokeAll pool tasks)]
      (.get future))
    (.shutdown pool)))

(defn test-stm [nitems nthreads niters]
  (let [refs (vec (map ref (repeat nitems 0)))
        iter #(dosync (doseq [r %] (alter r + 1 %2)))]
    (test-concur iter refs …
Run Code Online (Sandbox Code Playgroud)

concurrency performance jvm clojure stm

5
推荐指数
1
解决办法
899
查看次数

在Grails 3中使用Sitemesh

我正在将一组grails 2.0.4应用程序迁移到3.x版.所有这些都与许多java应用程序一起部署在同一服务器中.两组java和grails应用程序都使用sitemesh和freemarker模板具有相同的外观.但是使用grails 3.x我无法使commond装饰工作,应用程序坚持使用layouts/main.gsp来渲染我的gsp.

到目前为止(grails 2.0.4)提供一个共同的装饰是相当直的; 每个grails应用程序的文件/WEB-INF/decorators.xml提供对适用的freemarker模板的引用.web.xml包括sitemesh过滤器和freemarker装饰器servlet声明和映射

decorators.xml:

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/">
    <excludes>
        <pattern>/ND/*</pattern>
        <pattern>/*/ND/*</pattern>
     </excludes>
     <decorator name="freemarker" page="myftl.ftl">
         <pattern>/*</pattern>
     </decorator>
</decorators>
Run Code Online (Sandbox Code Playgroud)

来自web.xml的Sitemesh过滤器和freemarker servlet:

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class>
    <init-param>
      <param-name>TemplatePath</param-name>
      <param-value>class://</param-value>
    </init-param>    
    <init-param>
      <param-name>default_encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>          
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <url-pattern>*.ftl</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 我在src/main/webapp/WEB-INF下移动了decorators.xml
  • 在grails 3.x中,sitemesh过滤器不再存在,因此,我删除了sitemesh.xml
  • 没有使用web.xml,所以现在我在spring/resources.groovy中定义了freemarker servlet:

resources.groovy:

beans = {
    sitemeshFreemarkerServlet(ServletRegistrationBean) {
        servlet = bean(FreemarkerDecoratorServlet)
        urlMappings = ["*.ftl"]
        loadOnStartup = 2
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,grails 3.x应用程序坚持使用layouts/main.gsp来渲染我的gsp页面.似乎没有处理decorators.xml.我错过了什么?

grails sitemesh grails-3.1

5
推荐指数
1
解决办法
1361
查看次数