clojure实践积累
文章平均质量分 71
蜗牛lz
这个作者很懒,什么都没留下…
展开
-
如何在REPL中运行已有项目中的函数
如何在REPL中运行已有项目中的函数原创 2014-10-10 11:47:28 · 1151 阅读 · 0 评论 -
clojure实战—— :pos & :pre断言
Clojure’s :pre and :post:pre 和:post是clojure提供的两个断言功能。:pre在函数调用之前检查参数是否符合条件。:post在函数调用之后检查返回值是否符合条件。例:(defn pos-add [& args] {:pre [(not-any? neg? args)] :post [( (apply + a原创 2014-11-11 15:53:12 · 1660 阅读 · 0 评论 -
clojure实战——如何在java中调用clojure函数
clojure作为一门函数式编程语言,有其自身的优势,比如可以用极为精简的代码写一些逻辑运算,灵活的edn文件配置,编程效率特别高。因此,在需要编写一些较为复杂的逻辑模块或者是要和第三方clojure库/服务进行无缝交互时,可以使用该方法。原创 2016-08-27 08:21:49 · 3248 阅读 · 0 评论 -
clojure实战——快速搭建web前端开发框架
clojure实战——快速搭建web前端开发框架之前写过一篇类似的文章,搭建web前端开发框架(模拟web服务器、推送js修改),感觉讲的还是有点复杂,因为将模拟后台的开发也放进去了,但在使用clojurescript+reagent的实际生产过程中,发现后台模拟其实是没有多大用处的。很多时候为了模拟后台程序而花时间写一些代码,而且一旦有所变动,又得修改代码,重启figwheel,花费不少时间。反倒原创 2017-04-24 23:50:40 · 2354 阅读 · 0 评论 -
web服务程序设计探索(2)——插件模型
一、模型图该模型是自己摸索出来的一种web服务设计模型,整个围绕核心业务逻辑处理模块进行。在这个模型中,core业务逻辑处理中心处理负责执行所有逻辑处理流程,该模块所需要的所有副作用操作都以“插件”的形式从参数中传入。而所谓的“插件”,其实就是一些处理副作用读写的函数。二、模块说明service模块提供网络服务,根据具体使用的技术,对客户端来的请求进行路由分发,提取出请求参数,对参数进行解密、格式转原创 2017-06-17 14:08:22 · 804 阅读 · 0 评论 -
web服务程序设计探索(3)——中间件模型
一、中间件模型中间建模型是插件模型的一种改进版。上次提高插件模型中,核心业务逻辑处理模块并不是一个真正的“纯函数”,因为它里面存在写操作。中间件模型正是将这些写操作剥离出来,放在一个中间件中。中间件只负责执行事务(包括数据库操作,rmi/rpc/http远程调用,内存数据操作等),不理解业务,比如它只负责SQL语句的执行,而不知道SQL是如何组织的,也不知道SQL的内容。二、模块说明因为大多数模块和原创 2017-06-18 00:04:01 · 939 阅读 · 0 评论 -
clojure实战——binding vs let
clojure实战——binding vs letbinding vs let(1)binding 创建了一个动态的域绑定;用于动态绑定动态的Var,即必须先创建一个动态绑定的Var,然后才可以进行动态绑定。binding 用于线程内绑定。使用binding创建的绑定不能被其他线程可见。clojure中每个Var都可以有一个”根值”(也可以不设置),它是对所有线程可见的。而一个可动态绑定的Var原创 2017-09-17 15:47:27 · 1095 阅读 · 0 评论 -
clojure实战——引述相关'`~~@
clojure实战——引述相关’`~~@clojure中,经常看到一些诸如’ ` ~ ~@ #’ 之类的符号,本博客专门针对其中与引述相关的三个符号(其实就是函数)进行详细说明。这三个符号(函数)在clojure.core中定义,因此可直接在repl中使用。普通引述——’ ‘:普通引述。 ’ 等同于 quote,是它的简写版;返回参数的不求值的形式。 普通引述不允许反引述示例:原创 2017-09-02 10:31:26 · 667 阅读 · 0 评论 -
clojure实战——符号&@#'+-*/
clojure实战——符号&@#’+-*/本博客继续对clojure语言中一些符号进行讲解:&,@,-‘,#’。保持“剩下的元素”——&、%& &:保持”剩下的元素” 在解构中,可以用&符号保持解构剩下来的元素,有点像java中的可变参数示例:(comment (defn &test [a ...原创 2017-09-02 11:33:01 · 2444 阅读 · 0 评论 -
clojure实战——宏
clojure实战——宏本博客主要介绍clojure中宏相关的基础知识,因为自己没能很深入研究clojure的宏,所以做不到深入的讲解。但根据自己及什么clojure用的比较好的人的经验,能不用宏就不用宏,用宏、特别是逻辑复杂的宏机会真的很少,因此我个人觉得本博客所涉及的东西已经足够应付一般的场景了。clojure宏概述clojure宏在编译期间被求值,而不是文本替换(和C语言的预编译不同),宏的求原创 2017-09-02 14:43:53 · 852 阅读 · 0 评论 -
clojure实战——IO(1)
# clojure实战——IO(1)本博客主要介绍clojure基本文件处理。除了clojure.core单元,还主要用到clojure.java.io单元。在实践本博客中的示例时,可以在repl中require相应命名空间:(require '[clojure.java.io :as cio])(require '[clojure.edn :as edn])原创 2017-09-02 10:09:42 · 1101 阅读 · 0 评论 -
clojure实战——schema for clojure
一、何为schemaschema是描述数据形式的一种clojure数据结构,可用于文件、校验函数和数据。 下面举个例子让大家对schema有个总体认识,例:(ns schema-examples (:require [schema.core :as s]))(def s-type s/Str)(s/validate s-type "123") ;; Success!(s/val原创 2016-08-27 09:09:40 · 1151 阅读 · 0 评论 -
clojure实战——配置文件
使用clojure开发时,被它灵活、简单的配置形式给惊艳到了!当然,我这里不是说各种复杂的组件之间的配置,而是一些简单的、用于程序内部逻辑的一些配置。因为自己在使用clojure时,用各种组件构建复杂的服务的经验尚少,就不敢妄语。这里主要针对自己在项目开发工程中用到的部分做讲解。clojure配置的方式大致有两种(当然,github也有一些开源包定义自己配置方式):.edn文件原创 2015-09-01 09:24:17 · 3073 阅读 · 0 评论 -
HornetQ Topic/Queue for Clojure
HornetQ Topic/Queue for Clojure1. HornetQ 概述 HornetQ是一个支持集群和多种协议,可嵌入、高性能的异步消息系统。HornetQ完全支持JMS,HornetQ不但支持JMS1.1 API同时也定义属于自己的消息API,这可以最大限度的提升HornetQ的性能和灵活性。在不久的将来更多的协议将被HornetQ支持。 2.原创 2014-11-07 09:30:32 · 1566 阅读 · 0 评论 -
clojure实战--schema for clojure
Schema for Clojure Data ShapeDeclaration and Validation1.何为schemaschema是描述数据形式的一种clojure数据结构,可用于文件、校验函数和数据。下面举个例子让大家对schema有个总体认识.例:(ns schema-examples(:require [sche原创 2014-10-31 13:21:26 · 1850 阅读 · 0 评论 -
clojure实战——日志处理
clojure实战——日志处理1. 关于日志的一些想法日志对于开发人员来说,是定位、分析软件故障时的重要依据;对于运维人员来说,是了解软件运行状态、系统状态的重要途径;对于业务需求方来说,是获取统计业务相关数据的重要来源。由此观之,开发人员在记录日志时,不仅需要考虑开发时定位软件异常、方便调试等需要,还要考虑来自运维、需求方这三方面的需求。另外,为了方便日后进行日志分析、统计,需要好好设计日志的记原创 2015-10-29 23:30:25 · 1821 阅读 · 0 评论 -
clojure实战——基于logstash搭建日志数据获取与整理平台(1)
clojure实战——基于logstash搭建日志数据获取与整理平台(1)1. 需求背景介绍比如: 在一个游戏平台中,所有的游戏都将结果直接写入到一个数据库,但现在我们想根据游戏结果来搞一些活动(活动可能只依赖某一个游戏结果数据,或多个游戏数据结果),此时我们可能想到以下几个方案:在所有游戏和数据库中间建立一个“游戏结果消息中心”,修改各个游戏代码,将游戏结果通知到“中心”,“中心”可将结果写入原创 2015-11-03 12:40:47 · 686 阅读 · 0 评论 -
clojure实战——基于logstash搭建日志数据获取与整理平台(2)
clojure实战——基于logstash搭建日志数据获取与整理平台(2)1. logstash简介logstash是金牌搭档ELK中的“L”,它主要负责数据的收集、解析整理、传输。这对应体现在它的配置文件中的input、filter、output这三段配置。下面仅针对本次项目中需要使用到的地方做一个讲解,其他方面读者可自行到其官网查阅。2. logstash使用(1)运行一个logstash使用l原创 2015-11-03 15:11:46 · 798 阅读 · 0 评论 -
重构之纯函数
重构之纯函数原创 2014-10-23 11:10:44 · 748 阅读 · 0 评论 -
clojure实战——函数内存化
纯函数就从纯函数开始讲起吧。 对于纯函数,它具以下几个特征:没有副作用:不会读写数据库、文件、socket、以及全局变量等。具有一致性:正是因为没有副作用,纯函数才能表现出一致性:即对于参数a, b它始终会返回结果c,不管在什么环境中。易于测试:纯函数的返回值完全由它的参数决定,因此编写测试用例时,不需要mock,你可以轻松地对一个纯函数进行全面测试。结果可缓存:任何使用到纯函数表达式的地原创 2015-12-08 19:38:21 · 1348 阅读 · 0 评论 -
clojure实战——搭建web前端开发框架(模拟web服务器、推送js修改)
直接动手搭建框架吧,闲话留着后面碎碎念~~1. 框架概述使用figwheel库,通过websocket将js推送给浏览器。修改ClojureScript之后,不用重新编译打包,就可立即推送到浏览器进行显示。使用ClojureScript REPL模拟web服务器,不需将网页部署到ngnix等容器中,浏览器即可访问本地web服务。使用environ库进行环境变量设置,可轻松切换开发/发布环境。原创 2015-10-30 00:53:41 · 2362 阅读 · 0 评论 -
clojure实战——midje测试框架
个人觉得,clojure开发的效率已然很高,这不仅源于语言自身的优雅、与java类库的无缝对接、开源社区中丰富的库,还有就是它拥有一套便捷的开发环境,Intellj IDEA + 。clojure+midje使得“测试驱动开发”在clojure开发中得到充分地体现。原创 2015-09-03 23:36:53 · 1295 阅读 · 0 评论 -
clojure实战——何时使用宏
clojure实战——何时使用宏一、记住几点在C语言中,宏在编译的时候会被文本替代,纯粹的文本替换。而在clojure中,宏在编译的时候会先被求值,然后求值后得到的数据结构代替宏原来的位置。而正是这个求值功能,使clojure的宏比C语言那种纯代码替代的宏具备更强大的功能。不管是C语言的宏还是clojure的宏,它们的起作用的时期都是“编译期”。如果可以最好不要用使用宏,优先使用函数。二、为原创 2017-11-23 22:18:55 · 880 阅读 · 0 评论