首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >condition || raise("error")

condition || raise("error")
EN

Stack Overflow用户
提问于 2012-04-05 01:24:18
回答 4查看 3.4K关注 0票数 4

我只是想知道这个语法记录在哪里:

代码语言:javascript
复制
1 > 2 || raise("error")

我试着把它用作条件:

代码语言:javascript
复制
1 > 2 || p "test"

但它不起作用:

代码语言:javascript
复制
SyntaxError: (irb):9: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
1 > 2 || p "test"
            ^
        from C:/Ruby193/bin/irb:12:in `<main>'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-05 01:32:20

你有的东西不能工作,因为你需要括号:

代码语言:javascript
复制
1 > 2 || p("test")

请注意,or (and and) has a different precedence than &&/||将不需要括号即可工作(并且您所做的操作更具语义意义):

代码语言:javascript
复制
1 > 2 or p "test"

就像unless一样

代码语言:javascript
复制
p "test" unless 1 > 2
票数 7
EN

Stack Overflow用户

发布于 2012-04-05 01:26:31

这只是一种内联方式,意思是“如果条件为false,则引发错误”。||只是一个常见的OR运算符,并且使用short-circuit evaluation对表达式求值。然而,为了清楚起见,我更喜欢这样:

代码语言:javascript
复制
raise("error") unless 1 > 2
票数 7
EN

Stack Overflow用户

发布于 2012-04-05 01:33:05

这两种执行都可以,问题是在p上排除了括号。从IRB运行代码

代码语言:javascript
复制
ruby-1.8.7-p302 :003 > 1 > 2 || raise("error")
RuntimeError: error
    from (irb):3

通过添加测试(),调用可以正常工作:

代码语言:javascript
复制
ruby-1.8.7-p302 :004 > 1 > 2 || p("test")
"test"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10016234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档