草庐IT

Common LISP 命令大全

mariocanfly 2023-03-28 原文

书籍下载地址:

Ansi Common Lisp 中文版|百度网盘

实用Common.Lisp编程 .pdf|百度网盘

LISP指令速查网站推荐:

Simplified Common Lisp reference (jtra.cz)

我制作的表格:

由于Common LISP命令很多,经常忘,所以做个这个表格,方便速查。

表格中命令的顺序基本为ANSI Common LISP这本书中命令出现的顺序。

命令 含义 例子
T
NIL
+-*/ 加减乘除 > (+ 2 3 4)
9
1+ (1+ n) 相当于 (+ n 1)
1- (1- n) 相当于 (- n 1)
>和< 大于和小于 > (> 2 1)
T
CHAR< 和 CHAR> 字符比较
** 全局变量需要左右加上星号 > (setf *print-array* t)
T
ZEROP 为0时返回真
ACTERP 是否为字符
/= 不相等
= 判断相等(建议到这个网站查看具体解释)。仅能判断数字。 > (= 4 4.0)
 T
EQ 是否完全相同。内容相同但是内存位置不同也为不同。不用于数字。 > (eq (cons 'a 'b) (cons 'a 'b))
NIL
> (eq 'a 'a)
T
EQL 与EQ相似。可以比较数字。
EQUAL 是否内容相同。内存位置可以不同。字符串大小写敏感 > (equal (list 1 (cons 2 3)) (list 1 (cons 2 (+ 2 1))))
T
EQUALP 字符串大小写不敏感
AND OR NOT 逻辑与、或、非
ODDP 是否为奇数
EVENP 是否为偶数
QUOTE(`) 不求值 > `(+ 1 2)
(+ 1 2)
CONS 构建一个长度为2的列表
(但第二个输入值可以是一个列表)
> (cons 'a '(b c d))
(A B C D)
CONSP 判断是否为CONS
LIST 构建一个列表 (list 1 2 3)
GETF 获取列表的键值 (getf (list :a 1 :b 2 :c 3) :a) ;;如果没有该值,返回NIL
CAR 获取列表第一个元素
CDR 获取列表第二个以及
之后的元素构成的列表
THIRD 获取列表第三个元素
LISTP 判断输入是否为列表
NULL 判断是否为空表或NIL
IF 相当于c语言的aaa?xxx:yyy
DEFUN 声明全局函数
(defun name (parameter*))
"Optional documentation string."
body-form*)
(defun our-third (x)
(car (cdr (cdr x))))
调用时:(our-third (1 2 3))
(DEFUN的参数列表
&rest 剩余的参数。会被包装为列表。 (defun our-funcall (fn &rest args)
(apply fn args))
&optional 可选参数 (defun philosoph (thing &optional (property 'fun))
(list thing 'is property))
&key 关键字参数 > (defun keylist (a &key x y z)
(list a x y z))
KEYLIST
> (keylist 1 :y 2)
(1 NIL 2 NIL)
)
EQL 相等判断
FORMAT 输出 > (format t "~A plus ~A equals ~A. ~%" 2 3 (+ 2 3))
2 PLUS 3 EQUALS 5
NIL
~A 数据输出的位置,相当于C语言的%d
~% 换行符
READ 输入 > let ((val (read))
LET 定义局部变量 > (let ((x 1) (y 2))
(+ x y))
3
DEFPARAMETER 创建全局变量(变量需要加星号) > (defparameter *glob* 99)
DEFCONSTANT 定义全局常量(不需要星号)
BOUNDP 判断是否为全局变量或常量 > (boundp '*glob*)
T
DEFVAR 定义全局变量 (defvar *db* NIL)
SETQ 赋值
SETF 赋值(可给全局或局部变量),可以创建全局变量。
可以给数组的某个值赋值,而setq不行。
> (let ((a '(1 2 3 4))) (setf (third a) 'new-value) a)
(1 2 NEW-VALUE 4)
SET 赋值。用于设置符号 (set 'foo '(1 2 3))
INCF 自加。不加参数时相当于c的++。也可以参数相当于+=
REMOVE 返回不包含这个对象的新列表,但不改变原列表 > (setf lst '(c a r a t))
(C A R A T)
> (remove 'a lst)
(C R T)
DELETE REMOVE的破坏性版本。但不能保证所需移除的元素都能移除。 > (setf lst '(a r a b i a) )
(A R A B I A)
> (delete 'a lst )
(R B I)
> lst
(A R B I)
DO 循环
(DO (变量定义)
(结束条件 返回值)
循环主体)
其中变量定义为(变量名 变量初值 (变量变化语句))
(defun show-squares (start end)
(do ((i start (+ i 1)))
((> i end) 'done)
(format t "~A A%" i (* i i))))
DOTIMES 循环次数 (dotimes (x 5 x)
(format t "~A " x))
0 1 2 3 4
5;; 第一行第二个x是返回值,可以不加
LOOP 循环宏 > (loop for x from 0 to 9
do (princ x))
0123456789
NIL
> (loop for x = 8 then (/ x 2)
until (< x 1)
do (princ x))
8421
NIL
(defun sumx (n)
(loop for x from 1 to n
sum x));;返回从1加到n的结果
> (loop for x from 1 to 5
collect (random 10))
(3 8 6 5 0)
(defun even/odd (ns)
(loop for n in ns
if (evenp n)
collect n into evens
else collect n into odds
finally (return (values evens odds))))
> (even/odd '(1 2 3 4))
(2 4)
(1 3)
(loop for i below 10
and a=0 then b
and b=1 then (+ b a)
finally (return a));;计算第11个斐波那契数
PROGN 接受任意数量的表达式,依序对它们求值,并返回最后一个值。
DOLIST for each... > (dolist (obj lst) 相当于C++的for(auto obj:lst){,相当于Python的for obj in lst:
FUNCTION(#') 把函数当做实参传入
APPLY 接受函数和实参列表,并返回把传入函数应用在后面实参的结果 > (apply #'+ '(1 2 3))
6
FUNCALL 功能和APPLY相同,但实参不需要包装成列表。 > (funcall #'+ 1 2 3)
6
LAMBDA Lambda表达式 (lambda (x y)
(+ x y))
> (funcall #'(lambda (x) (+ x 100)) 1)
TYPEP 判断是否为某种类型 > (typep 27 'integer)
T
COPY-LIST 返回列表的复制
ATOM 验证一个项是否为原子(即列表的一个项)
APPEND 返回列表串接 > (append '(a b) '(c d) 'e)
(A B C D E)
NCONC 返回列表串接并更新第一个列表的最后一个 cons 单元的 next 指针。 > (let ((l1 (list 1 2 3))
(l2 (list 4 5 6)))
(nconc l1 l2)
l1)
(1 2 3 4 5 6)
NTH 通过索引获取列表元素 > (nth 0 '(a b c))
A
NTHCDR 找到第n个CDR > (nthcdr 2 `(a b c d e))
(C D E)
LAST 返回列表最后一个CONS对象 > (last '(a b c))
(C)
LAST的CAR 返回列表的最后一个元素 > (car (last '(a b c))) 
C
SECOND 返回第二个元素
CADR 返回第二个元素(相当于CDR的CAR)
CADDR 返回第三个元素(相当于CDR的CDR的CAR)可以无限加D。
MAPCAR 返回把函数应用到列表每个元素的结果 > (mapcar #'(lambda (x) (+ x 10))
'(1 2 3))
(11 12 13)
MAPCAN 类似MAPCAR。但它返回值是用NCONC拼接在一起的。
MAPC 把函数应用到列表每个元素,返回原来的列表
MAP 把函数应用到列表每个元素,可定义返回的类型。 (map 'list (lambda (x) (+ x 10)) '(1 2 3 4))
(11 12 13 14)
MAP-INTO 把函数应用到列表每个元素,第一个参数不是一个序列类型,而是用来存储结果的。 > (let ((a (list 1 2 3 4))) (map-into a #'* a a) a)
(1 4 9 16)
还可以:(setf v (map-into v #'1+ v))
MAPLIST 将列表的渐进的下一个 CDR传入函数 > (maplist #'(lambda (x) x) '(a b c))
((A B C) (B C) (C))
MEMBER 判断元素是否为列表的成员。可以传入参数:TEST和:KEY > (member 'b '(a b c))
(B C)
> (member '(a) '((a) (z)) :test #'equal)
((A) (Z))
> (member 'a '((a b) (c d)) :key #'car)
((A B) (C D)) ;;在这个例子里,我们询问是否有一个元素的CAR是 a
MEMBER-IF 返回由满足条件的元素构成的列表 > (member-if #'oddp '(2 3 4))
(3 4)
ADJOIN 如果对象还不是列表的,成员,构建对象至列表上 > (adjoin 'b '(a b c))
(A B C)
> (adjoin 'z '(a b c))
(Z A B C)
UNION 并集
INTERSECTION 交集
SET-DIFFERENCE 补集 > (set-difference '(a b c d e) '(b e))
(A C D)
LENGTH 返回元素的数目
SUBSEQ 获取列表的一部分,相当于其他语言的Slice > (subseq '(a b c d) 1 2)
(B)
>(subseq '(a b c d) 1)
(B C D)
REVERSE 列表反转
NREVERSE 使原列表反转?
EVERY 判断列表每个元素都满足条件 > (every #'oddp '(1 3 5))
T
SOME 判断列表部分元素满足条件 > (some #'evenp '(1 2 3))
T
PUSH 把元素插入列表的前端 (push atom list)
POP 移除列表的第一个元素,并返回这个元素
ASSOC 返回列表中CAR为指定元素的列表 > (setf min '((a b c) (b c) (c d)))
> (cdr (assoc 'a min))
(B C)
MAKE-ARRAY 构造数组 > (setf arr (make-array '(2 3) :initial-element nil)) ;;构造了一个2x3的数组
AREF 通过索引获取数组元素 > (setf (aref arr 0 0) 'b)
B>
(aref arr 0 0)
B
#na 表示字面常量的数组,其中n是数组的维度 #2a((b nil nil) (nil nil nil))
VECTOR 向量 > (vector "a" 'b 3)
VECTOR-PUSH 把元素插入向量的前端
VECTOR-POP 移除向量的第一个元素,并返回这个元素
SVREF 通过索引获取向量元素
WRITE-TO-STRING 数字转字符串
SORT 字符串排序 > (sort "elbow" #'char<)
"below"
CHAR 通过索引获取字符串元素 (char string pos)
COPY-SEQ 返回序列(字符串)的复制
CONCATENATE 连接 > (concatenate 'string "not " "to worry")
"not to worry"
TAILP 如果第一个列表是第二个列表的一部分,则返回T
ELT 通过索引获取任何种类的序列元素。针对特定类型的序列,特定的存取函数会比较快,所以使用 elt 是没有意义的,除非在代码当中,有需要支持通用序列的地方。
POSITION 返回序列中一个元素的位置,未找到元素时返回 nil。参数:start :end :test > (position #\a "fantasia")
1>
(position #\a "fantasia" :start 3 :end 5)
4
> (position 3 '(1 0 7 5) :test #'<)
2
SUBSEQ 获取子串(SUBSEQ STR P1 P2)
POSITION-IF 返回第一个满足此函数的元素 > (position-if #'oddp '(2 3 4 5))
1
FIND 返回要寻找的对象 > (find #\a "cat")
#\a
FIND-IF 返回要寻找的满足函数的对象 > (find-if #'characterp "ham")
#\h
REMOVE-DUPLICATES 仅保留序列中每个元素的最后一次出现。
REDUCE 把序列压缩成一个值 (reduce #'fn '(a b c d))等同于(fn (fn (fn 'a 'b) 'c) 'd)
DEFSTRUCT 定义结构体 (defstruct point
x
y)
MAKE-HASH-TABL 创建哈希表,无需参数。 > (setf ht (make-hash-table))
GETHASH 获取一个键值 > (setf (gethash 'color ht) 'red)
RED
REMHASH 从一个哈希表中移除一个词条,若返回T,说明有词条被移除
BLOCK
RETURN-FROM 返回块或函数 > (block head
(format t "Here we go.")
(return-from head 'idea)
(format t "We'll never see this."))
Here we go.
IDEA
RETURN 返回
TAGBODY
GO 相当于其他语言的goto。需要在TAGBODY下使用 > (tagbody
(setf x 0)
top
(setf x (+ x 1))
(format t "~A " x)
(if (< x 10) (go top)))
1 2 3 4 5 6 7 8 9 10
NIL
LET* 相当于嵌套版本的LET,可以依赖一个表达式设立另一个变量。可以把x设为1,同时把y设为x+1.原版LET就不行。
WHEN 当测试为真时,对主体求值
UNLESS 仅在测试表达式返回假时,才对主体求值
CASE 相当于C语言的switch (defun month-length (mon)
(case mon
((jan mar may jul aug oct dec) 31)
((apr jun sept nov) 30)
(feb (if (leap-year) 29 28))
(otherwise "unknown month")))
TYPECASE 按照类型来switch (TYPECASE X
(NUMBER (* X 2)))
VALUES 返回多个值
MULTIPLE-VALUE-BIND 绑定多个值。如果变量的数量大于数值的数量,剩余的变量会是 nil 。如果数值的数量大於变量的数量,多余的值会被舍弃。
CATCH 捕获异常 (defun super ()
(catch 'abort
(sub)
(format t "We'll never see this.")))
(defun sub ()
(throw 'abort 99))
> (super)
99
THROW 抛出异常
ERROR 抛出异常文字 (ERROR "Oops!")
UNWIND-PROTECT 使程序不会被报错打断 (UNWIND-PROTECT
FBOUNDP 是否有函数与给定符号绑定 > (fboundp '+)
T
SYMBOL-FUNCTION 返回函数。可用于给函数配置某个名字。 (setf (symbol-function 'add2)
#'(lambda (x) (+ x 2)))
> (add2 1)
3
DOCUMENTATION 获取函数的文档字串 > (DOCUMENTATION #'+ 'function)
"sum of its arguments. With no args, returns 0."
LABELS 声明局部函数。用法与DEFUN一样。
COND 直到某个条件为真时才返回。相当于嵌套if或switch > (cond ((> 3 4) "variant 1")
((> 4 2) "variant 2")
(t "always valid variant"))
"variant 2"
DECLARE(SPECIAL x) 使x为动态作用域(详见ANSI COMMON LISP 76页)
COMPILED-FUNCTION-P 检查函数是否已被编译
COMPILE 编译函数
COMPILE-FILE 编译文件
MAKE-PATHNAME 新建一个路径。参数有host, device, directory, name, type 以及 version > (setf path (make-pathname :name "myfile"))
OPEN 打开文件流。需要一个路径和大量选择性关键字参数。 > (setf str (open path :direction :output :if-exists :supercede)) ;;supercede表示取代。output表示写文件。input表示读文件。
CLOSE 关闭文件
READ-LINE 从文件流中读一行。若不指定文件流,则从标准输入中读一行,相当于READ。
WITH-OPEN-FILE 相当于Python的with,不需要close,保证文件能够关闭。 (with-open-file (str path :direction :output
:if-exists :supercede)
(format str "Something~%"));;向文件写入Something\n
PRIN1 输出包含双引号。给程序产生输出。
PRINC 输出不包含双引号。给人类产生输出。
SYMBOL-NAME 获取符号名 > (symbol-name 'abc)
"ABC"
垂直杠之间的字符序列将被视为符号。
SYMBOL-PLIST 获取符号的属性列表(PLIST) > (setf (get 'alizarin 'color) 'red)
RED
> (get 'alizarin 'color)
RED
> (setf (get 'alizarin 'transparency) 'high)
HIGH
> (symbol-plist 'alizarin)
(TRANSPARENCY HIGH COLOR RED)
DEFPACKAGE 定义包 (defpackage "MY-APPLICATION"
(:use "COMMON-LISP" "MY-UTILITIES")
(:nicknames "APP")
(:export "WIN" "LOSE" "DRAW"))
(in-package my-application)
这段代码定义了新包my-application,使用了两个包,COMMON-LISP和MY-UTILITIES,一个昵称为APP,这样背的包可以这样引用符号APP:WIN。包本身只输出三个符号"WIN"、"LOSE"和"DRAW"。
IN-PACKAGE 包结尾
FLOAT 将任何实数转换为浮点数
TRUNCATE 返回任何实数的整数部分
FLOOR 返回小于等于参数的最大整数 特殊用法:(floor a b) 返回的是a/b的整数值和余数。计算时默认使用返回的整数。
CEILING 返回大于等于参数的最小整数
ROUND 返回最接近参数的整数 > (mapcar #'round '(-2.5 -1.5 1.5 2.5))
(-2 -2 2 2);;不做五入,而是取最近的偶数
RANDOM 接受一个整数或浮点数。返回一个小于n的数字
SIGNUM 返回参数的符号。可以返回-1,0或1
FLOAT 转换为浮点数 > (/ 365 12)
365/12;;比值
> (float 365/12)
30.416666
EXPT (expt x n) = x^n
LOG (log x n) = \(\log_{n}x\), 若缺省n,则n默认为e
EXP (exp x) = e^x
SQRT 平方根
SIN、COS、TAN 三角函数
ASIN、ACOS、ATAN 反三角函数
SINH、COSH、TANH 双曲函数
ASINH、ACOSH、ATANH 反双曲函数
PI 常数π
short-float短浮点、single-float单精度浮点、double-float双精度浮点、long-float长浮点
MOST-POSITIVE-FIXNUM最大整数、MOST-NAGATIVE-FIXNUM最小整数 (不同实现下不同)
EVAL 与Python的eval功能相同。可把列表视作代码 > (eval '(+ 1 2 3))
6
DEFMACRO 声明宏 (defmacro nil! (x)
(list 'setf x nil))
也可定义为:
(defmacro nil! (x)
`(setf ,x nil))
> (nil! x)
NIL
> x
NIL
MACROEXPAND-1 展开宏(用于测试) > (macropexpand-1 '(nil! x))
(SETF X NIL)
T
, 在反引号表达式中重启求值 > (setf a 1 b 2)
2>
> `(a is ,a and b is ,b)
(A IS 1 AND B IS 2)
,@ 与逗号相似,但将其(本来应该是列表的)参数扒开。 > (setf lst '(a b c))
(A B C)
> `(lst is ,lst)
(LST IS (A B C))
> `(its elements are ,@lst)
(ITS ELEMENTS ARE A B C)
GENSYM 自由符号。保证宏定义的变量不会与外面的变量重名。 (defmacro ntimes (n &rest body)
(let ((g (gensym))
(h (gensym)))
`(let ((,h ,n))
(do ((,g 0 (+ ,g 1)))
((>= ,g ,h))
,@body))))
DEFCLASS 声明类 (defclass circle ()
(radius center));;这说明类circle的实例包含两个槽,分别名为radius和center.
MAKE-INSTANCE 创建类的实例 > (setf c (make-instance 'circle))
SLOT-VALUE 槽的值 > (setf (slot-value c 'radius) 1)
(槽的属性
:accessor、:writer、:reader 可读写、可写、可读 (defclass circle ()
((radius :accessor circle-radius)
(center :accessor circle-center)))
> (setf c (make-instance 'circle))
#<CIRCLE #XC5C726>
> (setf (circle-radius c) 1)
1
> (circle-radius c)
1
:initarg 定义参数名
:initform 定义缺省值 (defclass circle ()
((radius :accessor circle-radius
:initarg :radius
:initform 1)
(center :accessor circle-center
:initarg :center
:initform (cons 0 0))))
> (setf c (make-instance 'circle :radius 3))
#<CIRCLE #XC2DE0E>
> (circle-radius c)
3
> (circle-center c)
(0 . 0)
:acclocation :class 定义类变量 (defclass tabloid ()
((top-story :accessor tabloid-story
:allocation :class)))
> (setf daily-blab (make-instance 'tabloid)
unsolicited-mail (make-instance 'tabloid))
#<TABLOID #x302000EFE5BD>
> (setf (tabloid-story daily-blab) 'adultery-of-senator)
ADULTERY-OF-SENATOR
> (tabloid-story unsolicited-mail)
ADULTERY-OF-SENATOR
)
DEFMETHOD 定义方法。支持重载,甚至可以对单一的对象做特化。 (defmethod combine ((x number) (y number))
(+ x y)
(defmethod combine ((x (eql 'powder)) (y (eql 'spark)))
'boom)
:before :after :around 标准方法组合机制(standard method combination)规定,调用一个函数会调用:around方法,如果有的话;否则,依序调用:before方法、主方法、:after方法
DECLARE、DECLAIM 声明(局部、全局)。
DECLARE(OPTIMIZE (SPEED 3)  (SAFTEY 0)) 编译参数。speed 0~3。3最快。作用在函数里。 (declaim (optimize (speed 3)
(compilation-speed 0)
(safety 0)
(debug 0)));;这块代码让所有代码在任何情况下都尽可能更快。
(DECLAIM(INLINE x)) 使函数x为内联函数。能提高运行速度。递归函数不能内联。 (declaim (inline single?))
(defun single? (lst)
(and (consp lst) (null (cdr lst))))
(DECLAIM (FIXNUM x)) 声明x为定长数(整数)。 (defun poly (a b x)
(declare (fixnum a b x))
(+ (* a (expt x 2)) (* b x)))
(declare (type (vector fixnum 20) v));; 声明了一个仅含有定长数,企鹅长度固定为20的向量。
(常见函数及其破坏性版本
安全 破坏性
append nconc
reverse nreverse
remove delete
remove-if delete-if
remove-duplicates delete-duplicates
subst nsubst
subst-if nsubst-if
union nunion
intersection nintersection
set-difference nset-difference
)
DEFTYPE 定义类型标识符 (deftype multiple-of (n)
`(and integer (satisfies (lambda (x)
(zerop (mod x ,n))))))
> (type 12 '(multiple-of 4))
T;;定义了4的倍数的标识符
PACKAGE-NAME 返回包的名字
FIND-PACKAGE 返回一个给定名称的包 > (find-package "COMMON-LISP-USER")
#<Package "COMMON-LISP-USER" 4CD15E>
SYMBOL-PACKAGE 接受一个符号并返回该符号被 interned 的包
EXPORT 使符号对其他包可视(可用单冒号访问,不可视时只能用双冒号访问)
IMPORT 导入包
USE-PACKAGE 使用包
TRACE 追踪函数,用于调试,可在每次函数调用时显示输入的参数
UNTRACE 取消追踪函数

数字类型

一些神奇算法

  1. 计算1/n的循环节长度算法(返回-1表示没有循环节,返回其他值即为循环节长度):
(defun cycli (n)
  (if (= (gcd n 10) 1)
      (loop with m = 1
            with d integer
            for c upfrom 1
            do (setf (values d m) (floor (* 10 m) n))
            when (= m 1) return c)
      -1))
  1. 给出罗马数字字符串,返回数字的整型值
(defun num (romanChar)
  (case romanChar
   (#\I 1)
   (#\V 5)
   (#\X 10)
   (#\L 50)
   (#\C 100)
   (#\D 500)
   (#\M 1000)))

(defun decoder (roman)
  (setq res 0)
  (dotimes (x (length roman))
    (incf res
    (if (or (zerop x) (<= (num (char roman x)) (num (char roman (1- x))) ))
      (num (char roman x))
      (- (num (char roman x)) (* 2 (num (char roman (1- x))))))))
  res)

有关Common LISP 命令大全的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  3. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  4. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  5. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  6. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  7. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  8. ruby - Capistrano 中的执行、测试和捕获命令有什么区别? - 2

    关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程

  9. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

  10. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

随机推荐