百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Clojure符号 字符串 字符 curl 字符集

lipiwang 2024-11-01 14:12 7 浏览 0 评论

符号

+、concat和java.lang.String这样的形式都被称为符号,用来为事物命名。

Clojure 中,符号用来对各式各样的东西命名。

● 函数,例如str和concat。

● 操作符,例如+和-,终究不过是函数罢了。

● Java类,例如java.lang.String和java.util.Random。

● 命名空间和Java包,例如clojure.core和java.lang。

● 数据结构和引用类型。

符号不能以数字开头,但可以包含字母、数字、加号(+)、减号(-)、乘号(*)、除号(/)、感叹号(!)、问好(?)、英文句号(.)和下划线(_)。

Clojure 会采用一些未文档化的其他字符作为其内部符号,另外将来也可能会为符号增加更多的合法字符。

/和.会被Clojure加以特殊对待,用于支持命名空间。

字符串与字符

字符串是一种读取器形式。

Clojure字符串就是Java字符串。它们使用双引号来划定界限,并且可以跨越多行。

"This is a\nmultiline string"

-> "This is a\nmultiline string"

"This is also

a multiline string"

-> "This is also\na multiline string"

REPL 回显字符串的字面量时,总是包括了换行转义符。如果确实“打印”了一个多行字符串,那它就会以多行的方式输出。

(println "another\nmultiline\nstring")

| another

| multiline

| string

-> nil

Clojure并未封装大多数的Java字符串功能。作为替代,你可以使用Clojure的Java互操作形式来直接调用它们。

(.toUpperCase "hello")

-> "HELLO"

toUpperCase前面的句点告知Clojure,应该将其视为一个Java方法,而非Clojure函数。


被Clojure封装了的字符串功能之一是toString。无需直接调用toString,而是应该使用Clojure的str函数。

(str& args)

str函数与toString有两点不同。一是它能接受多个参数,二是它会跳过nil而不引发错误。

(str 1 2 nil 3)

-> "123"

Clojure字符同样也是Java字符。其字面语法是\{letter},letter可以是一个字母,或者下列这些字符的名称:backspace、formfeed、newline、return、space和tab。

(str \h \e \y \space \y \o \u)

-> "hey you"

和字符串一样,Clojure 并未封装 Java 的字符处理功能。同样可以使用Java互操作,比如Character/toUpperCase。

(Character/toUpperCase \s)

-> \S


字符串是由字符组成的序列。当对字符串调用Clojure的序列处理函数时,会得到由这些函数返回的一个字符序列。

interleave函数来。

(interleave "Attack at midnight" "The purple elephant chortled")

-> (\A \T \t \h \t \e \a \space \c \p \k \u \space \r

\a \p \t \l \space \e \m \space \i \e \d \l \n \e

\i \p \g \h \h \a \t \n)

不能使用str函数把字符打包进一个字符串。

(str (interleave "Attack at midnight" "The purple elephant chortled"))

-> "clojure.lang.LazySeq@d4ea9f36"

最主要的问题是,str函数接受的是数量可变的参数,但传给它的参数只有一个,一个包含了参数列表的序列。解决方案是apply函数。

(apply f args* argseq)

apply函数接受一个函数f、一些可选的args和一个序列argseq作为参数。然后,会调用f,并将args和argseq解开为一个参数列表传给f。

使用(apply str ...)由字符序列来创建一个字符串。

(apply str (interleave "Attack at midnight" "The purple elephant chortled"))

-> "ATthtea cpku raptl em iedlneipghhatn"

还可以再次使用(apply str ...),显示那条机密消息。

(apply str (take-nth 2 "ATthtea cpku raptl em iedlneipghhatn"))

-> "Attack at midnight"

调用(take-nth 2 ...),会从序列中依次剔除每第2个元素,这样就还原了被混淆的消息。

相关推荐

ubuntu单机安装open-falcon极度详细操作

备注:以下操作均由本人实际操作并得到验证,喜欢的同学可尝试操作安装。步骤一1.1环境准备(使用系统:ubuntu18.04)1.1.1安装redisubuntu下安装(参考借鉴:https://...

Linux搭建promtail、loki、grafana轻量日志监控系统

一:简介日志监控告警系统,较为主流的是ELK(Elasticsearch、Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,...

一文搞懂,WAF阻止恶意攻击的8种方法

WAF(Web应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤Internet流量以阻止不良流量和恶意请求,WAF是确保Web服务的可用性和完整性的重要安全解决方案。它...

14配置appvolume(ios14.6配置文件)

使用AppVolumes应用程序功能,您可以管理应用程序的整个生命周期,包括打包、更新和停用应用程序。您还可以自定义应用程序分配,以向最终用户提供应用程序的特定版本14.1安装appvolume...

目前流行的缺陷管理工具(缺陷管理方式存在的优缺点)

摘自:https://blog.csdn.net/jasonteststudy/article/details/7090127?utm_medium=distribute.pc_relevant.no...

开源数字货币交易所开发学习笔记(2)——SpringCloud

前言码云(Gitee)上开源数字货币交易所源码CoinExchange的整体架构用了SpringCloud,对于经验丰富的Java程序员来说,可能很简单,但是对于我这种入门级程序员,还是有学习的必要的...

开发JAX-RPC Web Services for WebSphere(下)

在开发JAX-RPCWebServicesforWebSphere(上)一文中,小编为大家介绍了如何创建一个Web服务项目、如何创建一个服务类和Web服务,以及部署项目等内容。接下来小编将为大...

CXF学习笔记1(cxf client)

webservice是发布服务的简单并实用的一种技术了,个人学习了CXF这个框架,也比较简单,发布了一些笔记,希望对笔友收藏并有些作用哦1.什么是webServicewebService让一个程序可...

分布式RPC最全详解(图文全面总结)

分布式通信RPC是非常重要的分布式系统组件,大厂经常考察的Dubbo等RPC框架,下面我就全面来详解分布式通信RPC@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》...

Oracle WebLogic远程命令执行0day漏洞(CVE-2019-2725补丁绕过)预警

概述近日,奇安信天眼与安服团队通过数据监控发现,野外出现OracleWebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725)。由...

Spring IoC Container 原理解析(spring中ioc三种实现原理)

IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...

Arthas线上服务器问题排查(arthas部署)

1Arthas(阿尔萨斯)能为你做什么?这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在...

工具篇之IDEA功能插件HTTP_CLENT(idea2021插件)

工具描述:Java开发人员通用的开发者工具IDEA集成了HTTPClient功能,之后可以无需单独安装使用PostMan用来模拟http请求。创建方式:1)简易模式Tools->HTTPCl...

RPC、Web Service等几种远程监控通信方式对比

几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

取消回复欢迎 发表评论: