首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在clojure中通过regex返回命名空间?

在Clojure中,可以使用正则表达式(regex)来返回命名空间。命名空间是Clojure中用于组织和管理代码的一种机制,它类似于其他编程语言中的模块或包的概念。

要通过正则表达式返回命名空间,可以使用Clojure的re-find函数。re-find函数用于在字符串中查找与正则表达式匹配的第一个子字符串,并返回匹配结果。

下面是一个示例代码,演示如何使用正则表达式返回命名空间:

代码语言:txt
复制
(defn get-namespace [symbol]
  (let [regex #"^([^\/]+)\/"]
    (if-let [match (re-find regex (str symbol))]
      (second match)
      nil)))

(get-namespace 'my-namespace/my-function) ; 返回 "my-namespace"
(get-namespace 'another-namespace/my-var) ; 返回 "another-namespace"
(get-namespace 'some-var) ; 返回 nil,因为没有命名空间

在上面的代码中,get-namespace函数接受一个符号(symbol)作为参数,并使用正则表达式^([^\/]+)\/来匹配命名空间部分。如果匹配成功,则返回匹配结果的第二个元素,即命名空间的名称。如果没有命名空间,则返回nil。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。关于Clojure中的正则表达式和命名空间的更多信息,可以参考Clojure官方文档。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为示例产品,实际选择产品应根据具体需求和场景进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Clojure 学习入门(18)—— 数据类型

在冒号后面,它们遵循和符号相同的命名规则(见第2章)。 关键字能够作为命名空间(可选的)。...关键字:user/foo,是指在user命名空间中叫做foo的关键字.命名空间关键字能够通过输入完全限定名或前缀两个冒号在当前命名空间中查询来引用(例如,如果当前命名空间都是user,::foo 和:...keyword 关键字函数 (keyword) 接受一个字符串参数,并返回一个同名的关键字。如果有两个参数,返回一个带命名空间的关键字。...(set1 :a) ;return :a (set1 :z) ;return nil 一般集合函数 注意,集合的关系函数并不在默认的clojure.core命名空间里,而是位于clojure.set命名空间...你要么显示地引用,要么使用ns形式的:use子句将其包含到你的命名空间里。请查阅第二章。 clojure.set/union 集合的并函数union接收任意数量的参数,每个参数都是一个集合。

2.3K10

(cljsrun-at (->JSVM :browser) 语言基础)

由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以在JVM和JSVM间共享,并且cljs也未能完全实现clj的所有语言特性,更何况由于JSVM是单线程因此根本就不需要cljSTM等特性呢...|:=$&] 末尾字符不能是: 以:为首字符则解释为Keyword 命名空间  cljs每个symbol无论是函数还是绑定,都隶属于某个具体的命名空间之下,因此在每个.cljs的首行一般为命名空间的声明...(ns hello-world.core) 文件与命名空间的关系是一一对应的,上述命名空间对应文件路径为hello_word/core.cljs、hello_word/core.clj或hello_word...自举编译器编译的ClojureScript的Macro代码 引入其他命名空间  要调用其他命名空间的成员,必须要先将其引入 ;;; 命名空间A (ns a.core) (defn say1 []...; 输出已加载的命名空间下的函数的源码 ; 注意:name必须是classpath下.cljs文件定义的symbol (cljs.repl/source name) ; 示例 (cljs.repl/

2.9K70
  • 几分钟内学习 Clojure

    ,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者宏调用,其他的都作为参数 ; 下面这个函数用于设置当前的命名空间 (ns test) ; 更多基本的例子: ; str 函数会用它所有的参数创造一个字符串...) (#{1 2 3} 4) ; => nil (没有就返回nil) ; clojure.sets 命名空间包含更多的函数 ; 一些有用的形式 ;;;;;;;;;;;;;;;;; ; clojure...upper-case) ; => "THIs Is A tEst." ; (#"" denotes a regular expression literal) ; 你可以使用":require" 从一个命名空间中引入模块...;; ; java 拥有一个庞大的各种用途的标准库,你一定迫不及待想学习如何在clojure中使用这些库 ; 使用import类引入java模块(这个还好没变化) (import java.util.Date...) ; 你也可以从一个命名空间中引入 (ns test (:import java.util.Date java.util.Calendar)) ; 类名字后加个”."

    1.7K40

    :browser) 命名空间就这么简单)

    前言  一个cljs文件定义一个命名空间通过命名空间可以有效组织代码,这是构建大型系统必备的基础设施。本篇我们就深入理解cljs命名空间吧!...通过:require 1.直接引入 (ns my-project.core (:require clojure.data)) ;; 使用时需要指定成员所属的命名空间 (clojure.data/diff...])) require用在REPL中就好了  在REPL我们会使用require、use、require-macros、import等macro来引入命名空间。...请紧记,这些确实仅仅用于REPL而已。而且当我们修改源码后,需要通过(require 命名空间 :reload)来重置并重新加载这个命名空间,不带:reload的话新修改的功能将不会生效哦!  ... (require 'clojure.data) (require '[clojure.set :as s]) 最佳实践 根据clojure-style-guide描述优先级别如下: :require

    81950

    Clojure 运行原理之字节码生成篇

    一种直观的想法是,每个命名空间(namespace)是一个类,命名空间里的函数相当于类的成员函数。...但仔细想想会有如下问题: 在 REPL 里面,可以动态添加、修改函数,如果一个命名空间相当于一个类,那么这个类会被反复加载 由于函数和字符串一样是一等成员,这意味这函数既可以作为参数、也可以作为返回值,...{}; } 可以看到,命名空间加载类里面有一些Var与AFn变量,可以认为一个Var对应一个AFn。.../core.clj" }); } RT 是 Clojure runtime 的实现,在__init0里面会对命名空间里面出现的 var 进行赋值。...另外,JVM 7 增加了 invokedynamic 指令,可以让运行在 JVM 上的动态语言通过实现一个 CallSite (可以认为是函数调用)的 MethodHandle 函数来帮助编译器找到正确的实现

    72920

    Clojure文件操作和惰性序列

    本文,我会介绍如何在Clojure读取和写入这些数据。 1. 打开文件 新建文件hello.txt,放到resources目录,内容如下: hello world! hello lambeta!...随后循环读取input-file的每行内容。若line不是nil(即存在),那么用空格分隔这行内容,得到一个数组,:"1.3 2.7" -> ["1.3" "2.7"]。...最后,写入到wtr。 ---- 注意:程序的str/split是通过(:require [clojure.string :as str])方式引入str命名空间的。...当我们通过repl求值with-open时,它并没有真的变现(take 2 (line-seq rdr)),而是在运行完try...finally之后,直接返回这个惰性序列作为结果。...换个角度,我们知道之所以抛出异常,是因为repl对返回的惰性序列求值了。那么如果我们不在repl求值,程序还会抛出异常吗?

    3.1K30

    Clojure Web 开发-- Ring 使用指南

    Clojure 众多的 Web 框架,Ring 以其简单统一的 HTTP 抽象模型脱颖而出。...Middleware 这一模式在函数式编程中非常常见,Clojure 生态里面新的构建工具 boot-clj 里面的 task 也是通过这种模式组合的。...middleware 实现的,compojure.handler 命名空间提供了常用的 middleware 的组合,针对 RESTful 可以使用 api 这个组合函数,它会把 QueryString...Ring 与其说是一个框架,不如说是由各个短小精悍的函数组成的 lib,充分展示了 Clojure 语言的威力,通过函数的组合定义出一套完整的 HTTP 抽象机制,通过宏来实现“路由”特定领域语言,极大简化了路由的定义...除了上面的介绍,Ring 生态里面还有 lein-ring ,它可以在不重启服务的情况下重新加载有修改的命名空间(以及其影响的),开发从未如何顺畅。

    85010

    【译】深入 Roam 数据结构 —— 为什么 Roam 远不只是一个笔记应用

    (译注:可借助于 Roam Portal Chrome Extension) 你的数据库总共有多少段文字?(译注:可查看 #Roam42 DB Stats) 在某个给定的命名空间下你总共有哪些页面?...一个实体的 datoms 可能出现在不同命名空间的属性。例如,如果我想找到包含r61dfi2ZH段落的页面的标题,我会编写以下查询。请注意,我首先读取页面的 entity-id 的 ?...除了clojure.core命名空间之外,Clojure 函数必须是完全命名空间限定的。遗憾的是,在核心命名空间之外,我只找到了几个在 Roam 能用的函数。...另外一些来自核心命名空间的有用函数包括,返回属性命名空间的 namespace 和返回字符串长度的 count。...通过扩展上面的规则,你可以使它不仅返回子树,而且返回?parent下的整个子树。规则可以包含其他规则,也可以自己递归调用。 [[(ancestor ?child ?parent) [?

    1.5K10

    Java扩展Nginx之一:你好,nginx-clojure

    模块,它支持使用Java对Nginx进行功能扩展: 至此,聪明的您应该猜到《Java扩展Nginx》系列的核心内容了:学习nginx-clojure模块,从入门到精通,解锁Clojure的强大能力,通过丰富的实战与大家一起掌握用...Ring 在 Clojure 是一个构建 Web 应用的底层接口和库....: 接下来根据您的操作系统对可执行文件做重命名,我这边是macOS,所以把nginx-macosx重命名为nginx,如果是linux,把nginx-linux-64重命名为nginx,如果是windows...,就把nginx-win64.exe重命名为nginx.exe 上述重命名操作是nginx-clojure官方推荐的,统一可执行文件名,这样运行文档的命令就统一了 执行命令....dependencies> 然后新增文件HelloHandler.java,如下所示,代码非常简单,实现NginxJavaRingHandler接口,invoke方法返回的数组只有三个元素:返回码、响应

    58320

    改善单元测试的新方法|洞见

    从这一点出发,我们可以总结出写单元测试的两个动机:驱动(:TDD)和验证功能实现。另外,软件需求“易变”的特征决定了修改代码成为必然,在这种情况下,单元测试能保护已有的功能不被破坏。...比如我曾经看过有人在写计算器kata程序的时候,将其中的一个测试命名为“return 3 when add 1 and 2”,这样的命名其实掩盖了测试用例背后的真实意图——传入两个整型参数,调用add方法之后得到的结果应该是两者之和...用Clojure测试代码表现出来: 不过如果有人修改了方法identity-nat的实现,单独处理入参为0的情况,这个测试还是能够照常通过。...当然也存在这样的可能:在一次运行,我们的测试无法发现失败的用例。...Clojure.spec提供方法很有前景,它可以让开发者在需要的时候,就能从类型和取值范围获益。 另外,除了Clojure,其它语言也有相应的生成式测试的框架,你不妨在自己的项目中试一试。

    91650

    C#的正则匹配和文本处理

    2.1、概述: 使用正则表达式 为 了 使 用 正 则 表 达 式 , 需要引入System.Text.RegularExpressions命名空间. 如果想要进行匹配, 就需要使用Match类....取而代之的是要用到Regex类的Replace方法。 首先来看看如何在字符串中进行单词匹配操作吧....如果值返回为True,那么正则表达式在字符串至少匹配了一条子串. 否则的话, 存储在 Success的值就是False。 程序还可以有另外一种方法来查看是否匹配成功....通过把正则表达式和目标字符串传递给IsMatch方法的方式可以对正则表达式进行预测试. 如果与正则表达式产生了匹配, 那么这种方法就返回True, 否则返回False....7、命名组 正则表达式组可以命名, 命名的组更容易使用, 这是因为可以通过引用组名来获得匹配结果. 组的名称由作为正则表达式前缀的问号和一对尖括号包裹的名字组成的.

    2.5K41

    不学函数式设计的3大损失

    副作用指一个函数或方法除了返回值之外,还对程序状态或外部世界产生了其他的影响。常见的副作用包括修改全局变量或静态变量、修改传入的参数、进行I/O操作(文件读写、网络通信)、修改数据库和抛出异常。...接下来让我们看看Clojure是如何实现这两点的。要理解Clojure函数式代码,需要首先转变Java面向对象的思维模式。Java,我们通常通过类操作其内部状态来完成任务。...而在Clojure,我们创建不可变的数据结构,并让这些数据流淌过一系列函数,每个函数基于输入,创建新的不可变数据结构,并返回,从而实现所需的功能,如图7所示。...图7左侧的这张图,就是我们从影院订票系统的Clojure版的main函数作为起点,绘制出的数据是如何在Clojure代码各个函数间流淌的图。...图8 对于失误1“直接返回内部状态”,函数的封装能从根源上避免从图8右侧代码能够看出,Clojure 没有提供直接从函数外部访问其内部状态的机制。

    42654
    领券