我在Clojure中构建DSL时遇到问题.这是我与其他一切事物隔绝的具体问题.
假设我们有一个简单的宏:
user> (defmacro m1 [x] `'~x)
#'user/m1
Run Code Online (Sandbox Code Playgroud)
它只返回文字提供的用户>(m1 toUpperCase)toUpperCase
如果我们为对象调用java方法,一切都按预期工作
user> (. "a" toUpperCase)
"A"
Run Code Online (Sandbox Code Playgroud)
但是如果我们将方法名称替换为返回methodname的宏调用
user> (. "a" (m1 toUpperCase))
; Evaluation aborted.
Unable to resolve symbol: toUpperCase in this context
Run Code Online (Sandbox Code Playgroud)
我想使用一些具有流畅接口的java库,如a().b().c().这映射到Clojure:
(.. obj method1 method2 method3....etc)
Run Code Online (Sandbox Code Playgroud)
我想创建替换此链的某些部分的宏,所以我的代码应该是这样的:
(.. obj method1 macro1)
Run Code Online (Sandbox Code Playgroud)
那应该扩展到
(.. obj method1 method2 method3)
Run Code Online (Sandbox Code Playgroud)
definline也没有帮助.我也试过了
我想将PgUp键盘上的一个键映射到Alt修饰符以在 Emacs 中生成A-键序列,以便我可以将其映射到一组全新的键绑定。
我正在查看我的键盘映射,目前我的左键Alt同时用作Meta_L
和Alt_L修饰符。这是相关输出xmodmap -pke:
keycode 64 = Alt_L Meta_L Alt_L Meta_L Alt_L Meta_L Alt_L Meta_L
Run Code Online (Sandbox Code Playgroud)
我不知道如何告诉 emacs 将Alt和Meta完全分开,
我看过了,x-alt-keysym它是nil
Which keys Emacs uses for the alt modifier.
This should be one of the symbols `alt', `hyper', `meta', `super'.
For example, `alt' means use the Alt_L and Alt_R keysyms. The default
is nil, which is the same as `alt'. …Run Code Online (Sandbox Code Playgroud)