我如何在CF中创建此语句?
<cfif (not isdefined("URL.room") or #URL.room# EQ "")
and (not isdefined("URL.system" or #URL.system# EQ "")
and (not isdefined("URL.date") or #URL.date# EQ "")>
显然括号不起作用,但说明了我想要完成的事情。这是什么语法?
修改 好的,我了解如何使用EQ等等。我发布这个有点匆忙。我的问题是关于括号。以这种方式使用它们在语法上是否正确?
答案 0 :(得分:15)
编辑:好的,我了解如何使用EQ 所有这一切。我发布了一下这个 匆忙我的问题是关于 括弧。是语法上的吗? 这样使用它们是正确的吗?
从句法上讲,是的。代码的语法是正确的,不会引发语法错误。
但是,这不一定是最好的方法。至少你应该在那里使用换行符,以使其更具可读性,如下所示:
<cfif (not isdefined("URL.room") or URL.room EQ "")
and (not isdefined("URL.system" or URL.system EQ "")
and (not isdefined("URL.date") or URL.date EQ "")
>
而且我更倾向于这样写:
<cfif NOT
( ( isDefined('Url.Room') AND Len(Url.Room) )
OR ( isDefined('Url.System') AND Len(Url.System) )
OR ( isDefined('Url.Date') AND Len(Url.Date) )
)>
因为它更具可读性,并且更明显的是每一行都检查相同的东西。
无论如何,这是假设我在一个IF语句中这样做。
如果你开始有很多条件需要检查,你可能会考虑做这样的事情:
<cfset FieldList = "Room,System,Date" />
<cfset AllFieldsValid = true />
<cfloop index="Field" list="#FieldList#">
<cfif NOT ( StructKeyExists(Url,Field) AND Len(Url[Field]) )>
<cfset AllFieldsValid = false />
<cfbreak/>
</cfif>
</cfloop>
<cfif AllFieldsValid>
...
一开始可能看起来令人生畏,但更容易维护 - 你只需要向FieldList添加一个新项目(你可能已经有一个变量用于那个purporse)。
无论如何,希望这一切都有所帮助 - 如果有任何问题,请告诉我。
答案 1 :(得分:4)
我更喜欢......
<cfparam name="URL.room" default="">
<cfparam name="URL.system" default="">
<cfparam name="URL.date" default="">
<cfif len(URL.room) EQ 0 and len(URL.system) EQ 0 and len(URL.date) EQ 0>
...
</cfif>
或者如果您对混合非布尔函数和布尔表达式
感到满意<cfif len(URL.room) and len(URL.system) and len(URL.date)>
...
</cfif>
答案 2 :(得分:3)
用eq
替换=答案 3 :(得分:2)
在CFML中,比较运算符使用字符而不是符号:
== EQ
!= NEQ
> GT
>= GTE
< LT
<= LTE
与布尔运算符类似:
! NOT
&& AND
|| OR
您仍然可以在CFScript模式下使用传统符号。
另外值得一提的是,作为Adobe ColdFusion的替代CFML引擎的Railo允许您在基于标记的代码中使用符号,如果没有关闭标记的歧义(例如条件包含在括号中)
答案 4 :(得分:1)
@Henry:
<cfif len(URL.room) EQ 0 and len(URL.system) EQ 0 and len(URL.date) EQ 0>
...
</cfif>
更短的:
<CFIF Len(URL.room) AND Len(URL.system) and Len(URL.date)>
Len()优于EQ“”
答案 5 :(得分:0)
你需要考虑一下你的逻辑。
如果未定义房间,则无法检查房间是否为空字符串。
你真正需要的是: 如果(structkeyexist(URL,“room”)和(Len(URL.room)eq 0或URL.room eq'blah')) 做一点事 其他 做别的事
我担心stackoverflow会在我的手机上切断你的示例情况,但希望这能说明你需要做什么。