创建一个整数以与 ColdFusion 中的参数类型整数一起使用



我喜欢在适当的情况下使用带有类型的必需参数。我想编写一个函数,它需要一个整数作为参数,如果传递任何其他内容,则会出现错误。一般来说,我一直在使用required numeric num但是numeric会接受浮点数和双精度等。我从adobe cfparam文档中了解到(尽管我更喜欢cfdocs版本(,integer是一个有效的参数类型。

我不明白的是首先如何创建一个整数。我收集 CF 在幕后做一些事情将数字存储为字符串,但正如您从下面的 cfscript 中看到的那样,我尝试了一些不同的东西,并从getMetaData()中获取了它们的类型,但它们实际上都不是整数。

更让我困惑的是,这些类型中的许多类型从isValid("integer", num)返回true,同时仍然无法required integer 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 );

输出:

阿拉伯数字 java.lang.String 是有效的整数?是的

3 java.lang.Double 是有效的整数?是的

7 java.lang.long 是有效的整数?是的

8 java.lang.String 是有效的整数?是的

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

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

3.5 java.lang.String 是有效的整数?不

4.5 java.lang.Double 是有效的整数?不

传递给 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 />');
}     

输出:

5 java.lang.Integer 是有效的整数?是的

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

我实际上不知道你的确切问题是什么,但我认为你的问题是CFML 中没有原生参数类型integer。这只是numeric.这将采用任何可以强制为数值的值:仅包含数字、布尔值、日期等内容的字符串(。

如果你有这个:

function f(required integer x)

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

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

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

丑陋,但可以解决问题。

下面是一个关于 trycf.com 的示例

最新更新