“单行if语句”存在于C#和VB.NET中,与许多其他编程语言和脚本语言一样,格式如下
lunchLocation = (dayOfTheWeek == "Tuesday") ? "Fuddruckers" : "Food Court";
有没有人知道在VBScript中是否存在,以及extact语法是什么?
发布于 2013-12-03 14:11:28
条件三元操作符并不是现成的,但是在VBScript中很容易创建自己的版本:
Function IIf(bClause, sTrue, sFalse)
If CBool(bClause) Then
IIf = sTrue
Else
IIf = sFalse
End If
End Function
然后,您可以按照您的示例使用此方法:
lunchLocation = IIf(dayOfTheWeek = "Tuesday", "Fuddruckers", "Food Court")
与使用单行If
/Then
/Else
相比,它的优点是可以与其他字符串直接连接。在一行上使用If
/Then
/Else
必须是该行上的唯一语句。
对此没有错误检查,该函数需要一个格式良好的表达式,该表达式可以计算为作为子句传入的布尔值。关于更复杂和更全面的答案,见下文。不过,希望这个简单的回答巧妙地展示了答案背后的逻辑。
还值得注意的是,与真正的三值运算符不同,不管sTrue
bClause
.的值是多少,都将计算和参数。如果您像在问题中一样将它与字符串一起使用,这是很好的,但是如果将函数作为第二个和第三个参数传递,则要非常小心!
发布于 2013-12-03 14:23:11
VBScript没有任何三值运算符。
在一行中不使用用户定义函数的封闭解决方案,纯VBScript:
If dayOfTheWeek = "Tuesday" Then lunchLocation = "Fuddruckers" Else lunchLocation = "Food Court"
顺便说一句,如果三元操作符对你很重要,你可以在经典ASP中使用JScript。
发布于 2013-12-03 15:26:48
编辑了 2017/01/28以适应某些非布尔条件参数
注意:如果您只需要根据布尔值选择一个字符串,请使用Polinominal的answer中的代码。它比这个答案中的代码更简单、更快。
对于一个简单但更“灵活”的解决方案,这段代码(这个答案中的原始代码)应该处理通常的基本场景。
Function IIf( Expression, TruePart, FalsePart)
Dim bExpression
bExpression = False
On Error Resume Next
bExpression = CBool( Expression )
On Error Goto 0
If bExpression Then
If IsObject(TruePart) Then
Set IIf = TruePart
Else
IIf = TruePart
End If
Else
If IsObject(FalsePart) Then
Set IIf = FalsePart
Else
IIf = FalsePart
End If
End If
End Function
如果使用Cbool
函数尝试将传递的Expression
参数转换为布尔值,并接受TrueValue
和FalseValue
参数中的任何类型的值。对于一般的使用,这是快速、安全和完全符合记录的VBScript行为。
这段代码唯一的“问题”是,对于某些数据类型,CBool
的行为并不完全“直观”,至少对于那些在vbscript和javascript之间不断变化的人来说是这样。虽然数值是一致的( 0
是False
,任何其他数值都是True
),但非数字类型会生成运行时错误(在以前作为false处理的代码中),除非它是一个具有数字内容的字符串,或者可以在英文或OS语言环境中解释为真或假值。
如果需要 it,则与?
javascript三元运算符“等效”的VBScript版本为
Function IIf( Expression, TruePart, FalsePart )
Dim vType, bExpression
vType = VarType( Expression )
Select Case vType
Case vbBoolean : bExpression = Expression
Case vbString : bExpression = Len( Expression ) > 0
Case vbEmpty, vbNull, vbError : bExpression = False
Case vbObject : bExpression = Not (Expression Is Nothing)
Case vbDate, vbDataObject : bExpression = True
Case Else
If vType > 8192 Then
bExpression = True
Else
bExpression = False
On Error Resume Next
bExpression = CBool( Expression )
On Error Goto 0
End If
End Select
If bExpression Then
If IsObject( TruePart ) Then
Set IIf = TruePart
Else
IIf = TruePart
End If
Else
If IsObject( FalsePart ) Then
Set IIf = FalsePart
Else
IIf = FalsePart
End If
End If
End Function
但是,与所使用的版本无关,要小心,是在调用一个函数,而不是使用三元操作符。放入TruePart of FalsePart中的任何代码或函数调用都将独立于条件的值执行。所以这个代码
value = IIf( 2 > 3 , DoSomething(), DontDoSomething() )
将执行这两项功能。只有正确的值才会返回给value
变量。
https://stackoverflow.com/questions/20353072
复制相似问题