Clojure 学习笔记之when-not
时间: 2023-08-07 17:03:37 浏览: 66
Clojure 中的 `when-not` 宏是一个条件语句,它的作用与 `when` 相反,只有在条件为假时才执行其代码块。具体来说,`when-not` 的语法结构如下:
```clojure
(when-not condition
body)
```
其中,`condition` 是一个求值为布尔值的表达式,如果它的值为假,则执行 `body` 中的语句。如果 `condition` 的值为真,则 `when-not` 并不执行任何操作。
下面是一个简单的例子,演示了 `when-not` 的用法:
```clojure
(defn print-if-not-nil [x]
(when-not (nil? x)
(println x)))
(print-if-not-nil nil)
;; 什么也不输出
(print-if-not-nil "Hello, world!")
;; 输出 "Hello, world!"
```
在这个例子中,`print-if-not-nil` 函数接受一个参数 `x`,并且只有在 `x` 不为 `nil` 时才会输出它的值。这是通过 `when-not` 条件语句实现的。
需要注意的是,`when-not` 和 `when` 一样,都是宏而不是函数,因此 `body` 中的代码块并不是一个参数列表。这意味着 `body` 中的代码块在宏展开时会被当作一个整体来处理,而不是被当作多个独立的表达式来处理。因此,在 `body` 中定义的局部变量是不能被其它表达式所引用的。
相关问题
nginx clojure
Nginx-Clojure是一个Nginx模块,它可以嵌入Clojure、Java或Groovy程序。它可以通过Java代码扩展Nginx的功能,例如权限验证、动态内容生成等。使用Nginx-Clojure,您可以使用Java或Clojure编写Nginx模块,这使得Nginx的扩展变得更加容易和灵活。
以下是一个使用Nginx-Clojure的简单示例:
```nginx
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
clojure_content_handler example.handler/handle-request;
}
}
}
```
在这个示例中,我们定义了一个Nginx服务器,它监听8080端口。我们还定义了一个名为`example.handler/handle-request`的Clojure函数,它将处理所有的HTTP请求。当请求到达时,Nginx-Clojure将调用这个函数,并将请求的上下文作为参数传递给它。该函数将生成响应并将其返回给Nginx,Nginx将把响应发送回客户端。
clojure编程 pdf
Clojure编程是一本介绍Clojure编程语言的书籍,可以作为学习和参考的资源。这本书涵盖了Clojure语言的基础知识,包括语法、数据结构、函数式编程等内容。它适用于初学者和有一定编程背景的人士。
这本书主要分为四个部分。第一部分介绍了Clojure语言的基本语法和数据类型,例如列表、向量、集合等。它还介绍了命名空间和宏的概念,帮助读者理解Clojure的核心思想和设计。
第二部分深入探讨了函数式编程的概念和技巧。它讨论了函数的定义和使用,以及函数式编程的特点和好处。此外,它还介绍了Clojure中的高阶函数和持久化数据结构,以及如何处理并发编程和错误处理等主题。
第三部分介绍了Clojure编程的实践技巧和最佳实践。它包括代码组织、测试、调试和性能优化等方面的内容。它还提供了一些现实世界的示例和项目案例,帮助读者将Clojure应用到实际的开发中。
最后一部分讨论了Clojure与其他编程语言和工具的集成。它涵盖了与Java的互操作性、使用Clojure开发Web应用、使用Clojure与数据库交互等方面的内容。同时还介绍了Clojure生态系统中的一些重要库和框架,例如Ring和Compojure等。
总的来说,Clojure编程是一本全面而深入的Clojure学习资源,可以帮助读者掌握该语言的各个方面。无论是初学者还是有经验的开发人员,都可以从这本书中收获到对Clojure编程的深入理解和实践经验。