format - 是否可以让 FORMAT 忽略未定义的格式指令?
问题描述
我想知道是否可以告诉 FORMAT 忽略未定义的格式指令。我查看了 CLHS 中 FORMAT 的页面,但我什么也没看到。
我想要做的是让 FORMAT~m
在格式字符串中忽略并输出~m
而不是尝试用某些东西替换它。我的计划是到那时我将调用另一个知道如何处理的函数~m
。
我想一个相关的问题是,有没有办法定义一个函数来处理一个未定义的格式指令?
期待一些问题。(1)我想一种解决方法是用占位符代替~m
,然后再将其替换回去并继续。如果一切都失败了,我想我会这样做。(2) 我想另一种一般策略是先调用另一个函数,处理~m
,然后在结果上调用 FORMAT。不幸的是,其他函数可以识别一些相同的指令,而对其他函数则不认可;它不仅识别~m
并忽略其他所有内容。
解决方案
您可以使用 ~/name/ 定义自己的格式指令,其中 name 是被调用函数的名称。在您的情况下,您将拥有:
(format t "~/m/" 1)
(defun m (stream n colon-mod at-mod)
(format stream "~a" n)) ; or do something else with n
您仍然需要更改控制字符串,但您可以添加一个预处理步骤,将“~m”替换为“~/m/”。
推荐阅读
- python-requests - 我收到错误 json.decoder.JSONDecodeError: while running a python code
- sql - SQL左连接,连接列中缺少数据
- hadoop - 手动启动 hdp 服务的顺序是什么?
- powershell - PowerShell MDB 查询 - 脚本在 Access 中而不是在 PowerShell 中工作
- gcc - 如何在 riscv-test 中编译 exp bechmark
- java - 如何使用 lambda 从 List<> 中获取总和和最低日期
- php - Laravel 多态关系返回 NULL
- r - 您如何使用 R 中的一个池连接和 dplyr 查询位于同一主机上的不同数据库?
- c - qsort 的自然排序不起作用
- c# - 组合框更改时不会调用 DataGrid RowValidationRule