我的if
/ elsif
语句仅执行if
,而不是elsif
。我无法理解为什么会这样做。很抱歉没有解释这是如何工作的。以下编辑解释了它。
它正在使用一串文本(用户发布)并检查其中是否有标记。如果文本有标签,那么它会将其变成链接。最终结果是标签变为链接的用户字符串。 REGEX是正则表达式,用于查看它是否包含@
,#
,$
这些标记之一。它们不相关,因为我知道它们是正确的。对于样本输入,它可以是来自twitter @user is #cool
REGEXS = [Supertag::Tag::USERTAG_REGEX, Supertag::Tag::HASHTAG_REGEX, Supertag::Tag::MONEYTAG_REGEX]
def linkify_tags(taggable_content)
text = taggable_content.to_s
REGEXS.each do
if text = text.gsub(Supertag::Tag::USERTAG_REGEX) {link_to($&, usertag_path($2), class: 'tag')}
elsif text = text.gsub(Supertag::Tag::HASHTAG_REGEX) {link_to($&, hashtag_path($2), class: 'tag')}
elsif text = text.gsub(Supertag::Tag::MONEYTAG_REGEX) {link_to($&, moneytag_path($2), class: 'tag')}
end
end
text.html_safe
end
有没有人对它为什么不起作用有任何建议或解释?它只执行if/elsif
答案 0 :(得分:2)
如果您使用if / else语句,则需要根据答案提出问题并执行其中一个问题。它被称为条件语句,因为您希望在提供操作之前满足条件。只有在给出答案后,您才能告诉他下一步该做什么。
现在,你正在做的是相反的事情。你告诉做什么,而不问问什么时候去做。难怪它只运行if语句,因为这个语句总是返回true。你面临的问题是你的第一个条件永远不会是假的或零。
根据经验,问题/条件应始终有多个可能的答案,否则没有必要提出问题。
答案 1 :(得分:1)
此代码:
if foo = any_value_other_than_false_or_nil
# this will always run
else …
# this will never run
end
这是因为您要将值分配给变量foo
,结果为'truthy'(除非您指定的值为nil
或false
)。
我想也许您打算使用regex == …
来测试正则表达式变量是否与常量匹配,或者可能regex =~ …
来测试正则表达式变量是否在字符串中找到匹配项。同样,也许您的意思是text == …
而不是text =
,以便比较它们是否相等而不是更改变量的值。
第一个告诉我有一个意外的“{”
这是因为Ruby(和我)不知道你的意思:
if foo = SomeConstant { some_code }
也许如果您提出另一个问题来描述您的意图 - 而不仅仅是您的代码 - 其他人可以帮助您实现最终目标,而不是回答有关症状的问题。