【问题标题】:Elisp: is symbol-name an O(1) operation wrt name length?Elisp:符号名称是O(1)操作wrt名称长度吗?
【发布时间】:2014-02-16 22:02:44
【问题描述】:

我不得不多次调用它,所以我想知道 如果我应该做一些优化,比如符号和名称的列表。

我看了一眼C源码,好像只是一个指针操作, 但我可能误解了,我想知道。

【问题讨论】:

  • symbol-name 以字符串形式返回符号名称。您期望对名称长度有什么样的依赖性?除了值的可能副本。
  • 值的副本是一个 O(N) 操作 w.r.t。名称长度。
  • 那么,你有答案了吗?但是您不能真正依赖正在发生的副本,因为它可以被忽略。
  • 那是我不确定的事情。是正在制作副本,还是我只是在获得参考?
  • 啊,我明白了。字符串是一个数组。数组是参考的。简单的代码来检查这个:(setq myval "foobar") (defun get-myval() myval) (aset (get-myval) 0 ?b)

标签: emacs elisp


【解决方案1】:

symbol-name 不复制,所以这是一个 O(1) 操作,是的。如果您这样做(aset (symbol-name 'car) 1 ?d),这可能是问题的根源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2011-07-19
    • 2015-12-27
    • 2021-11-23
    相关资源
    最近更新 更多