MAXScript 自定义函数 (八)

创建自定义函数

函数创建语法为:
<function_def>::=[mapped](function / fn)<name> {<parameter>}=<expr>

函数的定义以关键字function 或fn 开始,

后面紧跟着函数名,

然后是函数定义需要的参数序列,

“=”号表示函数定义的开始,函数定义语句必须用一对括号括起来,即使函数定义语句只有一行。


fn subtract x y =
(
    x-y
)

subtract 14 2
function sign val: 0 =
(
    if val == 0        
        then messageBox("Equal to 0") --等于0
    else if val > 0
        then messageBox("Bigger than 0") --大于0
    else messageBox("Less than 0") --小于0
)

sign val: 0        --Equal to 0
sign val: -5       --Less than 0
sign val: 5        --Bigger than 0

如果想定位一个脚本函数的源脚本文件,可以用 showSource() 函数,

showSource <fn>

函数变量

当用户定义一个函数时,在MAXScript 内部依次发生以下事件:

函数定义表达式<expr>被求值,创建一个函数值。

函数<name>作为一个新变量被声明。

函数值被赋给新变量。

函数值作为函数定义表达式的值返回。

fn saddle x y = sin x * sin y
fn sombrero x y = cos(x^2 + y^2)/(1 +(x^2 + y^2))
print(saddle 1 1)
fn funcA which =
( 
    if which == 1 then
        fn saddle x y = sin x * sin y
    else
        fn sombrero x y = cos(x^2 + y^2)/(1 +(x^2 + y^2))
)
myfunc=funcA 2
z=myfunc 10 10

函数参数

fn getXYZset val =
( 
    val.x=random -100 100
    val.y=random 100 100
    val.z=random val.x val.y
)

v1=[0,0,0]
v4=v1            -- 此处,v1 v4 引用的是同一个值,因此下面getXYZset v1  v4时候返回的值是相同的,

getXYZSet v1
format "v1= %; v4= %\n" v1 v4

getXYZSet v4
format "v1= %; v4= %\n" v1 v4

v5 = copy v1    -- v5 作为v1的副本调用,此时v1 v5引用的是不同的值
getXYZSet v1
format "v1= %; v5= %\n" v1 v5

----------------以下为返回结果----------------------

getXYZset()
[0,0,0]
[0,0,0]
-25.3909
v1= [-57,100,-25.3909]; v4= [-57,100,-25.3909]
OK
49.2024
v1= [43,100,49.2024]; v4= [43,100,49.2024]
OK
[43,100,49.2024]
[43,100,49.2024]
65.0695
v1= [-24,100,65.0695]; v5= [43,100,49.2024]
OK

return 表达式

返回一个值,

如在运行一个函数时遇到return 语句,函数会马上退出,并返回<expr>指定的值

return <expr>

fn zz =            --定义一个函数
(
    return 0       --返回值
)
    
zz()               --调用函数

----------------以下为返回结果----------------------

zz()
0

函数调用的优先级

一个函数调用优先级比操作数低,而比数学表达式、比较表达式、逻辑表达式要高,这意味着在将函数的变量用括号括起来时必须非常小心。

例如:

sin x+1 的求值顺序为(sinx)+1

必须把形式为表达式的变量用括号括起来,

例如:

sin(x+1)

atan2(y-1)(z-1)

时间: 2024-08-26 19:57:04

MAXScript 自定义函数 (八)的相关文章

第八讲 python自定义函数返回值

注意自定义函数:统一文件内函数名称不能相同. 单返回值 语法结构: def function_name([para1,para2...]) code... code... ... return value--------------可以返回一个值 eg: def test_c(n1,n2):-------------函数定义    n=n1+n2    return n sum1=test_c(100,102)----------函数调用----最好不要用sum,因为sum为关键字print '

Java Servlet(八):EL自定义函数

EL自定义函数:在EL表达式中调用的某个java类的静态方法,这个静态方法需在web应用程序中进行配置才可以被EL表达式调用. EL自定义函数可以扩展EL表达式的功能,让EL表达式完成普通java程序所能完成的功能. EL表达式出现的目的: 为了能够让一个java类的静态方法可以被EL表达式调用,需要在一个标签库描述文件(tld文件)中对EL自定义函数进行描述,以将java类中的静态方法映射成为一个EL自定义函数.

大数据笔记(十八)——Pig的自定义函数

Pig的自定义函数有三种:1.自定义过滤函数:相当于where条件2.自定义运算函数:3.自定义加载函数:使用load语句加载数据,生成一个bag 默认:一行解析成一个Tuple 需要MR的jar包 一.自定义过滤函数 package demo.pig; import java.io.IOException; import org.apache.pig.FilterFunc; import org.apache.pig.data.Tuple; //实现自定义的过滤函数,实现:查询过滤薪水大于20

Spark(十八)SparkSQL的自定义函数UDF

在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF(User- Defined Aggregation Funcation),用户自定义聚合函数,类似在group by之后使用的sum,avg等 UDTF(User-Defined Table-Generating Functions),用户自定义生成函数,有点像stream里面的flatMap 自定

Microsoft SQL Server 自定义函数整理大全

01.去除字符串中的html标记及标记中的内容 [叶子函数分享一]去除字符串中的html标记及标记中的内容 --1.创建函数 create function [dbo].[clearhtml] (@maco varchar(8000)) returns varchar(8000) as begin     declare @i int     while 1 = 1     begin        set @i=len(@maco)        set @maco=replace(@maco

如何利用自定义函数把阳历转换成阴历

数据库保存的是阳历日期,有时候会遇到把阳历换成阴历的需求,例如下图把阳历转换成阴历. 这个问题是我在开发报表过程中遇到的一个小需求,利用的工具是FineReport8.0版本,解决思路是首先定义一个可以将阳历转为阴历的类,然后自定义FineReport函数,在run方法中获取年月日参数并调用之前的类将阳历转为阴历,最终返回给报表. 实现步骤: 1.  阳历转阴历的类 FineReport里面会提供一个现成的农历日历工具类SolarToLunar,该类中通过today(intyear, int m

C/S权限系统得到拼音和五笔的自定义函数(二)

得到五笔: CREATE FUNCTION [dbo].[fun_getWB](@Str VARCHAR(2000)) RETURNS VARCHAR(2000) AS BEGIN DECLARE @t table (id int identity, col varchar(6000)) INSERT INTO @t SELECT 'A鞴鞲鞣鞫鞯鞔鞒鞑鞅靼銎跫綦翳蛩颟鹳鹋鸫鸢慝觐觋贳瓯戡檠迓甙忒弋撖摁廾蘼蘖蘩蘅蘧藿藜藁藓薰薷薹薅薜薮蕹薏薇薨薤蕻蕲蕃瞢蕺蕞蕤蕨蕈蕙蓼蓿蔻蕖蔺蔟蔹蓰蔸甍蔌蓣蓥蒗蒴蒹蒡

python第十四课--排序及自定义函数

1.排序 特点: 1).升序:从小到大 2).降序:从大到小 课堂实现选择排序:参看老郭选择排序.py文件 2.函数:(方法/method) 自定义函数: 概念:它表示一段作用范围(作用域),当中封装了一段业务逻辑代码,此范围有名字, 我们需要调用函数名,才能去执行它: 好处: 1).代码的复用性变强 2).代码的扩展性和维护性变好 3).代码的阅读性变好 函数有五要素: ①.函数修饰符:必须都是def开头 ②.函数返回值:函数执行完毕可能存在有返回值/没有返回值两种情况 ③.函数名:标识符(规

Oracle自定义函数1

用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数. OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序. IN OUT参数类型:表示参数既可以传值也可以被赋值. 1.语法格式: SQL语法方式创建的语法格式为: CREATE OR REPLACE FUNCTION function_name         /*函数名称*/(Para