在let
表单中定义匿名函数并重复调用外部函数是否存在性能损失?像这样:
(defn bar [x y]
(let [foo (fn [x] (* x x))]
(+ (foo x) (foo y))))
Run Code Online (Sandbox Code Playgroud)
与定义foo
为单独的函数相比,如下所示:
(defn foo [x] (* x x))
(defn bar [x y] (+ (foo x) (foo y)))
Run Code Online (Sandbox Code Playgroud)
我理解foo
这两种情况下的词汇范围是不同的,我只关心在多次调用时foo
是否会反复定义函数bar
.
我猜答案是否定的,即没有惩罚,但是clojure是怎么做到的?
谢谢!
请不要为我编辑问题.我的问题是关于字符串操作,改变文本流很可能会改变问题的含义并引起混淆.
该问题可以视为字符串操作问题.但我希望杰克逊能够解决我的问题.
假设我收到了一个字符串{"payload":{"foo":"bar","ipsum":["lorem","lorem"]},"signature":"somehmacsign"}
.当它显示时,它就像:
{
"payload": {
"foo": "bar",
"ipsum": [
"lorem",
"lorem"
]
},
"signature": "somehmacsign"
}
Run Code Online (Sandbox Code Playgroud)
如何从第11个字符中提取其子字符串{
直到}
前一个字符串,"signature"
.即,{"foo":"bar","ipsum":["lorem","lorem"]}
.从语义上讲,我想提取字段的原始字符串表示payload
.我想它不应该涉及将JSON字符串解析为Java对象并返回String.我不想冒失去字段,间距或任何小功能的顺序的风险,因为它意味着HMAC签名.
编辑1:重新说明这个问题与Java String文字无关.
编辑2:虽然说起来可能有点早,但我的问题一般没有明显的现成解决方案(如何部分提取/解析JSON字符串).事实上,我自己发现我的懒惰/部分解析理论有点冗长.它需要太多的传递来定位深度嵌套的节点.
特别是对于我的情况,我发现在请求正文中附加签名是一个坏主意,因为它给接收方带来了困难.我正在考虑将签名移动到HTTP标头,也许X-Auth-Token
?
编辑3:事实证明,我的结论太早了.Cassio的答案通过使用自定义反序列化器和魔法完美地解决了这个问题skipChildren
!