所以,简而言之,我基本上是在寻找以下方面的信息:
我正在尝试使用 ncursesw6.1(链接到 PicoLisp)。据我所知,PicoLisp 以这样一种方式直接传递值,以至于我通过非 C 语言调用 ncurses 的事实不应该成为一个因素[1]。但是,当我尝试使用颜色对(这样定义)时:
(curses "init_pair" NIL 1 *COLOR-SCHEME-TEXT *COLOR-SCHEME-BACKGROUND-DARK)
(curses "init_pair" NIL 2 *COLOR-SCHEME-COMMENT *COLOR-SCHEME-BACKGROUND-DARK)
(curses "init_pair" NIL 3 *COLOR-SCHEME-FUNCTION *COLOR-SCHEME-BACKGROUND-DARK)
(curses "init_pair" NIL 4 *COLOR-SCHEME-VALUE *COLOR-SCHEME-BACKGROUND-DARK)
(curses "init_pair" NIL 5 *COLOR-SCHEME-BACKGROUND-DARK *COLOR-SCHEME-COMMENT)
(curses "init_pair" NIL 6 *COLOR-SCHEME-BACKGROUND-DARK *COLOR-SCHEME-FUNCTION)
(curses "init_pair" NIL 7 *COLOR-SCHEME-BACKGROUND-DARK *COLOR-SCHEME-VALUE)
Run Code Online (Sandbox Code Playgroud)
它不起作用。相反,颜色对 1、2 和 3 都显示为相同的颜色对。然后 4 和 6 显示*COLOR-SCHEME-COMMENT在上面,*COLOR-SCHEME-BACKGROUND-DARK5 和 7 显示为 4 和 6 的反面。这似乎与我输入的内容没有任何逻辑关系。更奇怪的是,当我使用非自定义颜色(颜色 0-7)时,它也不起作用,因此通过定义这些配色方案颜色init_color与它无关。
我已经单独测试了颜色对 1 的颜色,所以我知道颜色被正确初始化。
到底是怎么回事init_pair …
我目前正在Haskell中编写一种编程语言.这种编程语言类似于Factor,是一种基于堆栈的串联语言.然而,在走了很远之后,我碰到了一堵砖墙:我有一个类型的Data.Map:
Map.Map String ([YodaVal] -> YodaVal, Int)
但我需要存储在map中的函数将map作为参数,因此我可以在递归时保留环境,也可以允许递归函数定义,以及Haskell - > Yoda函数的递归定义.但是,该类型将如下所示:
type Env = Map.Map String ([YodaVal] -> Env -> [YodaVal] -> YodaVal, Int)
当然扩展到:
Map.Map String ([YodaVal] -> Map.Map String ... -> [YodaVal] -> YodaVal, Int)
我正在使用getopts,而我之前从这样的标志中获取了一个值:
let file = matches.opt_str("f").unwrap();
let file_path = Path::new(&file);
Run Code Online (Sandbox Code Playgroud)
但是,我想通过使路径可选来更好地处理可能的错误.这是我的新代码:
let file = matches.opt_str("f");
let file_path = match file {
Some(f) => Some(Path::new(&f)),
None => None
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译此代码时,我收到错误'f' does not live long enough.我完全难过了.
继承我代码的MCVE:
fn main() {
let foo = Some("success".to_string());
let string = match foo {
Some(s) => Some(Path::new(&s)),
None => None
};
}
Run Code Online (Sandbox Code Playgroud)