<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://www.nmm-hd.org/d/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%AD%E6%B3%95%3A%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E5%87%BD%E6%95%B0</id>
	<title>语法:用户自定义脚本函数 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://www.nmm-hd.org/d/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%AD%E6%B3%95%3A%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E5%87%BD%E6%95%B0"/>
	<link rel="alternate" type="text/html" href="https://www.nmm-hd.org/d/index.php?title=%E8%AF%AD%E6%B3%95:%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E5%87%BD%E6%95%B0&amp;action=history"/>
	<updated>2026-05-04T14:46:46Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://www.nmm-hd.org/d/index.php?title=%E8%AF%AD%E6%B3%95:%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E5%87%BD%E6%95%B0&amp;diff=193&amp;oldid=prev</id>
		<title>Lititude：创建新页面为 '==定义和结构== 你可以像下面描述的一样，在AviSynth中定义、调用自己的函数。函数能返回任意的变量类型。一个用户自定义脚本函数...'</title>
		<link rel="alternate" type="text/html" href="https://www.nmm-hd.org/d/index.php?title=%E8%AF%AD%E6%B3%95:%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%E5%87%BD%E6%95%B0&amp;diff=193&amp;oldid=prev"/>
		<updated>2010-01-27T08:04:51Z</updated>

		<summary type="html">&lt;p&gt;创建新页面为 &amp;#039;==定义和结构== 你可以像下面描述的一样，在AviSynth中定义、调用自己的函数。函数能返回任意的变量类型。一个用户自定义脚本函数...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==定义和结构==&lt;br /&gt;
你可以像下面描述的一样，在AviSynth中定义、调用自己的函数。函数能返回任意的变量类型。一个用户自定义脚本函数是一个独立的脚本代码模块，每调用一次脚本中的函数，都会执行这个脚本代码一次。下面紧接着的是一个简单的的用户自定义脚本函数（是一个自定义的滤镜）：&lt;br /&gt;
 function MuteRange(clip c, int fstart, int fend)&lt;br /&gt;
 {&lt;br /&gt;
     before = c.Trim(0, -fstart)&lt;br /&gt;
     current = c.Trim(fstart, fend) &lt;br /&gt;
     after = c.Trim(fend + 1, 0)&lt;br /&gt;
     audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)&lt;br /&gt;
     return AudioDub(c, audio)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
用户自定义脚本函数以关键字“function”开始，后跟函数名。脚本函数命名规则和[[语法:脚本变量|脚本变量]]规则一致。&lt;br /&gt;
&lt;br /&gt;
函数参数列表紧随函数名之后。列表（可以为空）以'''(所期望的参数类型 - 参数名)'''对组成。各参数类型可以是AviSynth支持的任意[[语法:脚本变量|变量类型]]。&lt;br /&gt;
 function MuteRange(clip c, int fstart, int fend)&lt;br /&gt;
&lt;br /&gt;
然后是函数主体，也就是每次调用函数时执行的代码。参数在函数主体内按名称进行访问。函数主体由一对大括号{...}括起来。&lt;br /&gt;
 {&lt;br /&gt;
     before = c.Trim(0, -fstart)&lt;br /&gt;
     current = c.Trim(fstart, fend) &lt;br /&gt;
     after = c.Trim(fend + 1, 0)&lt;br /&gt;
     audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)&lt;br /&gt;
     return AudioDub(c, audio)&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
在函数主体的结尾处，需要有一个return声明，返回从参数和函数主体中计算出的最终结果。&lt;br /&gt;
     return AudioDub(c, audio)&lt;br /&gt;
&lt;br /&gt;
需要注意的是，不像其他的脚本语言那样在函数主体里支持多重返回声明，AviSynth的函数只能包含单个返回声明。因为这个脚本语言并不支持分支（也就是复合声明）。&lt;br /&gt;
&lt;br /&gt;
==一些关于用户自定义脚本函数的真相==&lt;br /&gt;
*函数可以有60个参数，而且可以返回任何Avisynth支持的类型（Clip、整数、浮点、布尔和字符串）。&lt;br /&gt;
*虽然不推荐，但实际上可以忽略参数的类型，这种情况下参数类型被定为通用类型“val”。&lt;br /&gt;
*如果函数期望第一个参数是Clip类型，而且没有提供这个参数，那么Clip会使用'''last'''这个特殊的变量。&lt;br /&gt;
*函数支持''命名参数''（named argument）。只要把参数名用双引号引起来，就成为命名参数。当定义完一个命名参数后需要注意：&lt;br /&gt;
#参数列表中所有后面的参数都必须也是命名参数。&lt;br /&gt;
#'''命名参数是一个可选的参数'''，也就是说在调用函数时可以不提供。&lt;br /&gt;
#当调用函数时，如果不提供可选的参数，那么这个参数会被设为void（“undifined”）（空/未定义）类型。但并不是乱来一个参数值 - 纯粹只是表示这个类型既不是Clip、整数、浮点，也不是布尔或字符串，仅仅“没有”可用的值而已。&lt;br /&gt;
#一般性，需要用[[Define]]函数测试一个可选的参数是否有明确的值，或用[[语法:控制函数|Default]]，既有Define的测试功能，在适当情况下也能传递一个默认值。&lt;br /&gt;
#一个void（“undifined”）值可以传递给其他的函数，也作为那个函数的可选参数。当你想创建一套调用别的函数的函数，这个功能可以保持相同的默认设置。&lt;br /&gt;
*函数一般计算出一个新值，而从不会更改已经存在的值。这就意味着函数所有的参数都是“按值”传递的而不是“按参考 - By reference”传递的。在Avisynth脚本语言中，为了改动一个值应该首先去赋一个新的值。&lt;br /&gt;
*函数可以调用另一个函数，包括它本身。这个方式称为递归。递归是一个创建实现复杂任务的非常有用的功能。&lt;br /&gt;
*局部的函数变量会把相同变量名的全局变量覆盖掉。例如，如果给''myvar''赋值，定义一个''myvar''变量，那在函数内部就无法访问叫''myvar''的全局变量了。&lt;br /&gt;
*上述情况对参数同样成立，因为在函数看来，参数是最初的局部变量。&lt;br /&gt;
&lt;br /&gt;
==相关链接==&lt;br /&gt;
[http://avisynth.org/mediawiki/Shared_functions 共享函数]，一个由AviSynth成员共同创建的，不断增多的共享函数合集。&lt;br /&gt;
&lt;br /&gt;
[[Category:AviSynth 语法]]&lt;/div&gt;</summary>
		<author><name>Lititude</name></author>
	</entry>
</feed>