如果缓冲区包含的字符少于10,000个,将执行略有不同的计算。你可能认为这是不必要的,因为第一种计算方法可以完成工作。然而,在小缓冲区中,第一种方法可能无法将光标精确放置在所需的行上;而第二种方法效果更好。
以下是代码:
(/ (+ 10 (* size (prefix-numeric-value arg))) 10))
这是一段代码,你可以通过发现函数嵌套在括号中的方式来理解它的运行。如果每个表达式都比其封闭表达式缩进得更深,那么代码会更容易阅读:
(/ (+ 10 (* size (prefix-numeric-value arg))) 10))
通过查看括号,我们可以看到最内层的操作是(prefix-numeric-value arg)
,它将原始参数转换为数字。在下面的表达式中,这个数字被乘以缓冲区的可访问部分的大小:
(* size (prefix-numeric-value arg))
这个乘法会产生一个可能比缓冲区的大小更大的数字——例如,如果参数是7,那么这个数字会大七倍。然后,这个数字加上10,最终将这个大数字除以10,得到的值比缓冲区中的百分比位置多一个字符。
所有这些计算得到的数字被传递给goto-char
,并将光标移动到该位置。