Elisp之funcall与apply调用函数(十)

公众号:Android系统攻城狮

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

1.前言

通常函数的调用都是用 eval 进行的,但是有时需要在运行时才决定使用什么函数,这时就
要用 funcall 和 apply 两个函数了。这两个函数都是把其余的参数Š为函数的参数进行调用。
唯一的区别:

funcall 是直接把参数传递给函数;
apply的最后一个参数是一个列表,传入函数的参数把列表进行一次平铺后再传给函数.

2.代码示例
<1>.funcall与apply调用list例子
(funcall 'list 'x '(y) '(z)) ;;funcall 是直接把参数传递给函数;
输出结果: (x (y) (z))

(apply 'list 'x '(y ) '(z)) ;;apply最后一个参数,展开后,传给函数
输出结果: (x (y) z)
<2>.elisp中使用apply调用函数例子
(defun my-function (a b c)
  (+ a b c))
(setq my-list '(1 2 3))
(apply #'my-function my-list) ; returns 6

<2>.elisp中使用funcall调用函数例子
(defun my-function (arg)
  "This is an example function."
  (message "You passed %s as an argument." arg))

(funcall 'my-function "hello")

funcall匿名调用函数

;;无参匿名调用
(funcall '(lambda () (message "You passed as an argument.")))


;;有参匿名调用
(funcall '(lambda (arg) (message "You passed %s as an argument." arg)) "12345")
更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值