小编abo*_*abo的帖子

Python内省:获取method_descriptor的参数列表?

作为我的问题介绍的代码插图:

import re, inspect, datetime

inspect.getargspec (re.findall)
# =>
# ArgSpec(args = ['pattern', 'string', 'flags'], varargs=None,
# keywords=None, defaults = (0,))

type (datetime.datetime.replace)
# => <type 'method_descriptor'>

inspect.getargspec (datetime.datetime.replace)
# => Traceback (most recent call last):
#      File "<stdin>", line 1, in <module>
#      File "/usr/lib/python2.7/inspect.py", line 816, in getargspec
#        raise TypeError('{!r} is not a Python function'.format(func))
# TypeError: <method 'replace' of 'datetime.datetime' objects> is
# not a Python function
Run Code Online (Sandbox Code Playgroud)

看来,对我来说,只有这样,才能找到的签名datetime.datetime.replace,而我的代码是看它在商务部:date.replace(year, month, day). …

python introspection

21
推荐指数
1
解决办法
729
查看次数

为什么elisp局部变量在这种情况下保持其值?

有人可以向我解释这个非常简单的代码片段中发生了什么吗?

(defun test-a ()
  (let ((x '(nil)))
    (setcar x (cons 1 (car x)))
    x))
Run Code Online (Sandbox Code Playgroud)

(test-a)第一次打电话时,我得到了预期的结果:((1)).但令我惊讶的是,再次召唤它,我得到了((1 1)),((1 1 1))等等.为什么会这样?期待(test-a)永远回归我错了((1))吗?另请注意,在重新评估定义后test-a,返回结果将重置.

还要考虑这个功能是否符合我的预期:

(defun test-b ()
  (let ((x '(nil)))
    (setq x (cons (cons 1 (car x)) 
                  (cdr x)))))
Run Code Online (Sandbox Code Playgroud)

(test-b)总是回来((1)).为什么不test-atest-b等同?

lisp emacs elisp literals

16
推荐指数
1
解决办法
520
查看次数

Elisp destruct-bind for cons cell?

我想做

(destructuring-bind (start end) (bounds-of-thing-at-point 'symbol))
Run Code Online (Sandbox Code Playgroud)

但是bounds-of-thing-at-point返回一个cons单元而不是列表,所以 destructuring-bind不起作用.什么可以适用于这种情况?

emacs elisp

12
推荐指数
2
解决办法
2272
查看次数

为什么Clojure比等效函数的mit方案快得多?

我在Clojure中找到了这个代码来筛选出前n个素数:

(defn sieve [n]
  (let [n (int n)]
    "Returns a list of all primes from 2 to n"
    (let [root (int (Math/round (Math/floor (Math/sqrt n))))]
      (loop [i (int 3)
             a (int-array n)
             result (list 2)]
        (if (>= i n)
          (reverse result)
          (recur (+ i (int 2))
                 (if (< i root)
                   (loop [arr a
                          inc (+ i i)
                          j (* i i)]
                     (if (>= j n)
                       arr
                       (recur (do (aset arr j (int 1)) arr)
                              inc
                              (+ j inc)))) …
Run Code Online (Sandbox Code Playgroud)

scheme clojure mit-scheme

10
推荐指数
2
解决办法
1254
查看次数

Emacs:如何获得默认主题?

我一直在使用默认主题,大约有10个面孔已经改变 custom-set-faces了一段时间了.但有时我想尝试一些自定义主题.问题是他们设置了超过10个面孔,一旦我加载了自定义主题,就没有办法回到我以前的设置.

只是为了澄清:

  1. 我通过自定义默认主题启动Emacs (load "faces").一切都很好.
  2. load-theme wombat.一切都很好.
  3. (load "faces")再次:一切都很乱,因为很多面孔仍然留在wombat州里.

有时单独的主题彼此不兼容,例如第二个主题设置比第一个主题更多的面孔,当返回第一个主题时,一切都变得一团糟.

所以我想知道是否有类似的东西load-theme default会将每个可以想象到的脸重置为默认emacs -q状态.

然后,我可以用我的10个自定义面调整它,并拥有我自己的主题,不会有我描述的问题.

emacs elisp

10
推荐指数
2
解决办法
7192
查看次数

Emacs:为什么shell命令"git log"有效,但"git shortlog"不行?

我无法弄清楚这一点.为什么这些行为有所不同:

(shell-command "git log")
(shell-command "git shortlog")
Run Code Online (Sandbox Code Playgroud)

第一个按预期工作:返回0并将东西打印到shell输出缓冲区.第二个返回0但不打印任何内容.这是为什么?

  1. 双方git loggit shortlog在完美地工作ansi-term
  2. 两者git loggit shortlog发出警告但仍然有效shell

git emacs shell elisp

9
推荐指数
1
解决办法
757
查看次数

如何在emacs中杀死一个带引号的字符串?

我想在源文件中删除带引号的字符串,而不必标记字符串和kill-region的开头,只需将点放在带引号的字符串中的任意位置并按下快捷键即可.

我尝试在elisp中编写一个函数,但我发现该文件需要从头开始解析,以确定该点是否在引用的字符串内,并找到引用字符串的边界(同样处理\")...

但该文件已被font-lock解析.所以现在我可以知道我是否在引用的字符串中:

(defun inside-quoted-string? ()
  (interactive)
  (print (find 'font-lock-doc-face (text-properties-at (point)))))
Run Code Online (Sandbox Code Playgroud)

但是我如何获得字符串的边界?font-lock知道它,因为它很好地用蓝色突出显示它,但我怎么得到它?

编辑:谢谢你的回答.我想出了这个完全符合我想要的代码 - 在不选择区域的情况下移动代码,甚至移动到代码的开头.

(defun kill-at-point ()
  "Kill the quoted string or the list that includes the point"
  (interactive)
  (let ((p (nth 8 (syntax-ppss))))
    (if (eq (char-after p) ?\")
    (progn 
      (goto-char p)
      (kill-sexp))
      (progn
    (up-list)
    (let ((beg (point)))
      (backward-list)
      (kill-region beg (point)))))))
(global-set-key (kbd "C-,") 'kill-at-point)
Run Code Online (Sandbox Code Playgroud)

欢迎提出任何改进建议.

emacs elisp

7
推荐指数
1
解决办法
459
查看次数

Emacs适当的cl-flet缩进?

目前的缩进对cl-flet我来说似乎真的很难看.例如,见:

(defun foo (lst)
  (cl-flet ((unusually-long-bar (x)
                                (1+ x)
                                (1+ x)
                                (1+ x)))
    (mapcar #'unusually-long-bar lst)))
Run Code Online (Sandbox Code Playgroud)

我想将它设置为更合理的东西,例如:

(defun foo (lst)
  (cl-flet ((unusually-long-bar (x)
              (1+ x)
              (1+ x)
              (1+ x)))
    (mapcar #'unusually-long-bar lst)))
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

emacs elisp

7
推荐指数
1
解决办法
582
查看次数

Git 存储库,其中每个子模块都是同一存储库的一个分支。如何避免双重/三重...使用 git clone --recursive 下载?

假设我有以下项目树:

src
data
doc
Run Code Online (Sandbox Code Playgroud)

我想将所有文件夹保存在 Git 存储库中,并发布到 Gitlab。但我不想跟踪datadocsrc.

所以我使用以下策略:

git remote add origin ADDRESS
git submodule add -b data ADDRESS data
git submodule add -b doc ADDRESS doc
Run Code Online (Sandbox Code Playgroud)

它实际上工作正常,除非我尝试使用以下命令复制存储库:

git clone --recursive ADDRESS
Run Code Online (Sandbox Code Playgroud)

所有对象都被传输 3 次:rootdatadocall 都包含:

  • 起源/主人
  • 来源/数据
  • 起源/文档

有没有简单的方法可以避免这种情况?只是为了澄清我想要什么:

  • 主存储库应该只 fetch origin/master,而不是其他两个
  • 数据子模块应该只 fetch origin/data
  • doc 子模块应该只 fetch origin/doc

使用 3 个单独的存储库很容易实现,但这太麻烦了,因为我将这种方法应用于多个项目。

更新

git worktree这个答案中,我可以手动实现我想要的。

但是现在,而不是自动方法(消耗 4 倍带宽):

git clone --recursive git@foo:foo/bar.git …
Run Code Online (Sandbox Code Playgroud)

git

7
推荐指数
1
解决办法
2087
查看次数

Elisp:如何在字节编译时避免“未知函数被定义”?

我的包 ,lispy使用来自 的函数ace-jump-mode。我仍在考虑是否应该使用;; Package-Requires:cookie 或featurep为此使用cookie ,但主要问题是我想要一个干净的字节编译emacs -q.

我认为这应该消除字节编译警告:

(declare-function ace-jump-char-mode "ext:ace-jump-mode")
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。对此有何想法?

确切地说,警告是“以下函数未知定义:ace-jump-char-mode,helm”。

emacs elisp

6
推荐指数
1
解决办法
3215
查看次数

标签 统计

elisp ×7

emacs ×7

git ×2

clojure ×1

introspection ×1

lisp ×1

literals ×1

mit-scheme ×1

python ×1

scheme ×1

shell ×1