sau*_*imo 6 parameters coldfusion type-conversion
我很喜欢在适当的地方使用必需的参数.我想编写一个函数,它需要一个整数作为参数,如果传递其他任何东西则会出错.通常我一直在使用required numeric num但是numeric会接受浮点数和双打等.我从adobe cfparam docs(虽然我更喜欢cfdocs版本)了解这integer是一个有效的参数类型.
我不明白的是如何创建一个整数.我收集CF在引擎盖下做一些存储数字作为字符串,但正如你从下面的cfscript中看到的那样,我尝试了一些不同的东西,得到了它们的类型getMetaData(),但它们都不是实际的整数.
为了增加我的困惑,许多这些类型true从isValid("integer", num)失败中返回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 );
Run Code Online (Sandbox Code Playgroud)
输出:
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 integer?没有
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 />');
}
Run Code Online (Sandbox Code Playgroud)
.OUPUTS:
5 java.lang.Integer isValid整数?是
传递给needsInt函数的NUM参数不是整数类型.
我实际上并不知道你的确切问题是什么,但我认为你的问题是integerCFML中没有原生参数类型.这只是numeric.这将采取任何可以强制转换为数值的值:仅包含数字,布尔值,日期和类似内容的字符串.
如果你有这个:
function f(required integer x)
Run Code Online (Sandbox Code Playgroud)
然后CFML将其解释为integer.cfc类型.comp-sci意义上不是"整数",也不是Java int原语,或java.lang.Integer等.
如果你需要你的参数是一个实际的整数,那么使用numeric,然后在函数体内验证它是一个整数,例如:
function f(required numeric x) {
param integer x;
// ...
}
Run Code Online (Sandbox Code Playgroud)
丑陋,但诀窍.