parameters – 在ColdFusion中创建一个与param类型整数一起使用的整数

我很喜欢在适当的地方使用必需的参数.我想编写一个函数,它需要一个整数作为参数,如果传递其他任何东西则会出错.通常我一直在使用必需的数字num,但数字将接受浮点数和双精度等.我从 adobe cfparam docs(虽然我更喜欢 cfdocs version)了解到整数是一个有效的参数类型.

我不明白的是如何创建一个整数.我收集CF做一些事情在引擎盖下存储数字作为字符串但是你可以从下面的cfscript看到,我尝试了一些不同的东西,并从getMetaData()得到它们的类型,但它们都不是实际的整数.

为了增加我的困惑,许多这些类型从isValid(“integer”,num)返回true,同时仍然失败了所需的整数num.

非常感谢你能指出我正确的方向.

private void function printMeta( required num ){
    writeOutput( '</br>' );
    writeOutput( ARGUMENTS.num );
    writeOutput( '</br>' );
    writeOutput( getMetaData( ARGUMENTS.num ).getName() );
    writeOutput( '</br>' );
    writeOutput( 'isValid integer? ' & isValid( 'integer', ARGUMENTS.num ) );
    writeOutput( '</br>' );
}

private numeric function addOne( required numeric num ){
    return ARGUMENTS.num + 1;
}


private function needsInt( required integer num ){
    return "what a lovely integer you've got there, it's " & ARGUMENTS.num;
}


test1 = 2;
printMeta( test1 );


test2 = addOne( test1 );
printMeta( test2 );

test3 = Int( 7 );
printMeta( test3 );

test4 = numberFormat( 8 );
printMeta( test4 );

try {
    test5 = needsInt( Int( 7 ) );
}
catch(any err) {
    WriteOutput('<br />');
    WriteDump( err.message );
    WriteOutput('<br />');
}

try {
    test6 = needsInt( test2 );
}
catch(any err) {
    WriteOutput('<br />');
    WriteDump( err.message );
    WriteOutput('<br />');
}

test7 = 3.5;
printMeta( test7 );

test8 = addOne( test7 );
printMeta( test8 );

输出:

2
java.lang.String中
isValid整数?是

3
java.lang.Double中
isValid整数?是

7
java.lang.Long中
isValid整数?是

8
java.lang.String中
isValid整数?是

传递给needsInt函数的NUM参数不是整数类型.

传递给needsInt函数的NUM参数不是整数类型.

3.5
java.lang.String中
isValid整数?没有

4.5
java.lang.Double中
isValid整数?没有

传递给needsInt函数的NUM参数不是整数类型.

编辑我试图专门创建一个java整数,仍然无法让它工作;

test11 = createObject("java","java.lang.Integer").parseInt("5");
printMeta( test11 );

    try {
    test12 = needsInt( test11 );
}
catch( any err ) {
    WriteOutput('<br />');
    WriteDump( err.message );
    WriteOutput('<br />');
}

.OUPUTS:


为java.lang.Integer
isValid整数?是

传递给needsInt函数的NUM参数不是整数类型.

我实际上并不知道你的确切问题是什么,但我认为你的问题是CFML中没有本机参数类型整数.它只是数字.这将采取任何可以强制转换为数值的值:仅包含数字,布尔值,日期和类似内容的字符串.

如果你有这个:

function f(required integer x)

然后CFML将其解释为integer.cfc类型. comp-sci意义上不是“整数”,也不是Java int原语,或java.lang.Integer等.

如果你需要你的参数是一个实际的整数,那么使用numeric,然后在函数体内验证它是一个整数,例如:

function f(required numeric x) {
    param integer x;
    // ...
}

丑陋,但诀窍.

Here’s an example on trycf.com

相关文章
相关标签/搜索