首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当结果是一个函数时,不能使测试变为真(语法错误编译在.没有这样的变量:.)

当结果是一个函数时,不能使测试变为真(语法错误编译在.没有这样的变量:.)
EN

Stack Overflow用户
提问于 2020-09-25 01:12:25
回答 1查看 71关注 0票数 0

当我想测试结果是另一个函数的函数时发生。我有这样的事情:

代码语言:javascript
复制
ns flexsearch.core

(defn init [{:keys [tokenizer split indexer filter] :as options}]
  (let [encoder (get-encoder (:encoder options))]
    (assoc (merge {:ids {} :data {}} options)
           :indexer (get-indexer indexer)
           :encoder encoder
           :tokenizer (if (fn? tokenizer) tokenizer #(string/split % (or split #"\W+")))
           :filter (set (mapv encoder filter)))))

在测试中:

代码语言:javascript
复制
ns flexsearch.core-test
[flexsearch.core :as f]

(def split #"\W+")

(is (= (f/init {:tokenizer false :split split :indexer :forward :filter #{"and" "or"}})
         {:ids {},
          :data {},
          :tokenizer f/init/fn--14976,
          :split #"\W+",
          :indexer f/index-forward,
          :filter #{"or" "and"},
          :encoder f/encoder-icase}))

这样做的结果是:

代码语言:javascript
复制
{:ids {},
 :data {},
 :tokenizer #function[flexsearch.core/init/fn--14976],
 :split #"\W+",
 :indexer #function[flexsearch.core/index-forward],
 :filter #{"or" "and"},
 :encoder #function[flexsearch.core/encoder-icase]}

我知道我必须将f/index前向,而不是repl弯曲搜索/索引转发的结果,但是它不适用于f/init/fn-14976(没有这样的var: F/init/fn-14976)

我认为这是对瓦尔斯的戏法,但我不知道它到底是如何工作的。任何你能提供的读物我都会感激的

--编辑--f/index-前进和f/编码器-icase标记工作正常。

-编辑2--我已经定义了:

代码语言:javascript
复制
(defn spliter [split]   (fn [x] (string/split x (or split #"\W+"))))

并将其用于:

代码语言:javascript
复制
(defn init [{:keys [tokenizer split indexer filter] :as options}]
  (let [encoder (get-encoder (:encoder options))]
    (assoc (merge {:ids {} :data {}} options)
           :indexer (get-indexer indexer)
           :encoder encoder
           :tokenizer (if (fn? tokenizer) tokenizer (spliter split))
           :filter (set (mapv encoder filter)))))

我得到了一个类似的“:记号器#FunctionFlexsearch.core/spliter/fn-34857”,我在测试中使用了它,它也失败了-

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-25 02:48:04

认为是因为令牌程序是一个匿名函数,所以出现了"No这么var“错误。

如果在flexsearch.core中将默认的令牌器定义为非匿名函数,然后在测试中使用该名称,它就会工作。

但是,通常情况下,不能将两个函数进行比较,就像@cfrick所说的那样。当您比较一些值是函数的映射时,您仍然在比较函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64056434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档