我一直在使用Pharo 7.0中的键盘快捷键.我想#jumpToNextKeywordOfIt
在Smalltalk编辑器中修改绑定,所以我在buildShortcutsOn
方法的定义中得到了以下更改:
(aBuilder shortcut: #jumpToNextKeywordOfIt)
category: RubSmalltalkEditor name
default: $y meta shift
do: [ :target | target editor jumpToNextKeywordOfIt: true ]
description: 'Jump to next keyword'.
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是,只是保存这个定义应该立即生效,但事实并非如此.然后我想,也许因为这是方法定义的一部分,然后在编辑器类上调用这个方法就可以了.现在,该方法需要一个参数aBuilder
,我真的不知道那是什么.所以出现两个问题:
aBuilder
在这种背景下是什么,如何得到它?我还有一个关于在Common Lisp中解码JSON的问题.我决定采用ST-JSON
我的工具.我能够获得一个JSO
包含JSON数据的对象,并访问所有字段st-json:getjso
.我想编写一个原则上类似于宏的宏来destructuring-bind
提供对JSON字段之后命名的变量的局部绑定(从那以后我开始怀疑这是不是一个好主意,但这是一个不同的问题).我想出了以下内容:
(defmacro destructure-jso (jso &body body)
(let (keys values)
(st-json:mapjso #'(lambda (key value)
(push key keys)
(push value values))
jso)
`(destructuring-bind ,keys ,values
,@body)))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在JSO
对象上使用它时,我得到的错误The value PARAMS is not of the expected type STRUCTURE.
在哪里PARAMS
是对象.谁可以给我解释一下这个?
谢谢.
我一直在考虑以下问题.假设我正在处理一个返回多个值的函数,例如truncate
.有没有一种聪明的方法来反转返回的值的顺序?我说的是比一些更聪明的东西
(multiple-value-bind (div rem) (truncate x y)
(values rem div))
Run Code Online (Sandbox Code Playgroud) 在我的 Haskell 应用程序中,我实现了以下机制来将敏感信息传递到二进制文件(不诉诸 CLI 参数):
TemplateHaskell
在编译时读取环境变量的机制:{-# LANGUAGE TemplateHaskell #-}
...
import Language.Haskell.TH.Env
...
myPrecious :: String
myPrecious = fromMaybe "" $$(envQ "MY_PRECIOUS")
...
Run Code Online (Sandbox Code Playgroud)
MY_PRECIOUS=<secret> stack build
然后它绑定到myPrecious
Haskell 端MY_PRECIOUS
看不到它ps aux
问题是,我现在可以在文本编辑器中打开该二进制文件或创建内存转储(例如使用 GDB),并通过一点决心挖掘秘密,特别是如果我知道它正在使用的上下文 - 我假设某些恶意行为者可能已经获得了源代码的访问权限。所以我一直想知道,是否有任何方法可以强制 GHC 生成更加混乱/乱码的二进制文件,其中这些值不容易可见。我知道没有这样的保护方案可以是万无一失的,但我正在寻找一种方法来使入侵者的任务变得更加困难。
common-lisp ×2
lisp ×2
ccl ×1
decompiling ×1
dump ×1
haskell ×1
json ×1
key-bindings ×1
macros ×1
pharo ×1
security ×1
smalltalk ×1