`
seemoon
  • 浏览: 159152 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ruby-if判断的一个问题

阅读更多
ruby对if的布尔判断是很开放的,并不要求if后面必须是布尔量,比如

puts "hi" if 3


输出hi,认为3是true,试了一下,除了

puts "hi" if nil


认为是false不输出hi之外,其他输入比如字符串,数字(即使数字为0),if统统认为是true。这个特点跟java大相径庭,java对if作了严格要求必须为布尔量,在编译的时候可以做检查。ruby由于是动态解释性的,无法在IDE中做类似强校验,因此有些错误是很难察觉的,如以下一段代码:

wanna_do_sth if self.xx=3


本意是想判断self.xx是否等于3,如果真则执行wanna_to_sth,但是由于手误,少写了个=号,这样就惨了,本意不想改变当前实例的属性,但是改了!而且程序跑起来也很顺溜!

这种问题在ruby当中只有到测试和实际运行时,问题才会暴露,很隐秘,但杀伤性很大,系统上线后遇到bug修正,如果引入类似错误,未经全面严格的测试就贸然上传代码覆盖,可能就会引发大麻烦了。

所以David说:小子,用ror一定要写好测试,不然会死得很惨滴!

嘿嘿...

分享到:
评论
4 楼 dmchun 2008-04-10  
没有IDE的话,运行前用-c检查一下代码。
C:\Workspace>ruby -c test.rb
test.rb:3: warning: found = in conditional, should be ==
Syntax OK

用NetBeans的时候,这样的代码会出现黄色警告的。

所以不是问题。鉴定完毕。
3 楼 dmchun 2008-04-10  
不是可以看警告的吗?

a= 3
puts "ok" if a=3


C:\Workspace>ruby test.rb
test.rb:3: warning: found = in conditional, should be ==
ok
2 楼 halfmile 2008-04-09  
一个窍门是把条件式左右颠倒就能避免这种杀伤力了。在各种动态类型语言中都有效。

wanna_do_sth if 3 == self.xx 
1 楼 sanbodhi 2008-04-09  
少写一个等号的错误,c里面一样会遇到啊。

相关推荐

    Ruby-GraphQL的ActionPolicy集成

    ActionPolicy则是Ruby中的一个授权库,它为Rails应用提供了基于对象的策略模式实现,帮助开发者更好地管理权限控制。本文将深入探讨如何将ActionPolicy与GraphQL集成,以在你的Ruby应用中实现安全且灵活的权限管理。...

    Ruby-Jbuilder通过一个构建式DSL创建JSON结构

    或者,如果一个列表可能为空,你可以用`if`判断: ```ruby json.posts if @posts.any? do |post| json.title post.title json.body post.body end ``` 在Rails应用中,Jbuilder模板通常与控制器一起使用。在控制...

    Ruby-Curly一个完全分离结构和逻辑的模板语言

    Ruby-Curly是一种模板语言,它致力于实现结构与逻辑的完全分离,这在Web开发中是一个重要的设计原则。模板引擎的主要任务是将静态的HTML布局与动态的数据结合起来,生成最终的网页内容。Curly就是这样一种工具,它...

    Ruby-ActiveMerchant一个简单的付款抽象库抽取自Shopify

    Active Merchant是Ruby社区中一个极为重要的库,它为开发者提供了处理在线支付的统一接口。这个库最初来源于著名电子商务平台Shopify,旨在简化各种支付网关的集成工作,使得开发者可以更专注于他们的核心业务逻辑,...

    Ruby-DeclarativeAuthorization一个授权Rails插件在同一个地方使用声明式DSL用于指定授权规则

    **Ruby-DeclarativeAuthorization** 是一个专门为Rails应用设计的授权插件,它引入了一种声明式的领域特定语言(DSL)来集中管理应用程序的权限规则。这个插件旨在简化身份验证和授权流程,使得开发者可以在代码中...

    Ruby-ActiveModelSerializer给你带来约定优于配置JSON生成

    `ActiveModel::Serializer` 是一个强大的工具,它使得JSON序列化过程更加规范、高效且易于维护。这个库遵循“约定优于配置”(Convention Over Configuration,简称CoC)的设计原则,这是Ruby on Rails框架的核心...

    Ruby-Way.rar_About Language

    在文件列表中,我们看到有一个名为“Ruby Way.chm”的文件,这很可能是《Ruby Way》电子版的主体内容。CHM是微软的Compiled HTML Help格式,通常用来存储电子书或帮助文档,用户可以通过它来阅读和学习书中关于Ruby...

    04Ruby 条件判断.docx

    更重要的是,Ruby有一个非常流行的Web框架——**Ruby on Rails**,它不仅简化了Web应用的开发过程,还极大地推动了Ruby在业界的应用和发展。 #### 二、条件判断语句 条件判断是任何编程语言中的基础概念之一,用于...

    elxgo-ruby-advance

    《深入探索Ruby编程:elxgo-ruby-advance解析》 Ruby是一种面向对象的、动态类型的编程语言,因其简洁明了的语法和强大的元编程能力而受...对于任何想要在Ruby领域深入发展的程序员来说,这是一个不可多得的学习资源。

    ruby-para-impacientes:开始使用 Ruby 的非常基础的教程

    "Ruby-para-impacientes" 可能是指针对急于掌握 Ruby 的初学者所设计的一个快速上手教程。这个教程可能注重实用性,旨在帮助学习者尽快了解并开始使用 Ruby 进行编程。 在 Ruby 中,基础概念包括变量、数据类型、...

    ruby-course:Ruby简介

    在给定的"ruby-course"中,你将学习如何使用`If / Else`来创建一个简单的交互式程序。这个程序会询问用户最喜欢的颜色,并根据用户输入给出相应的回应。下面是一个示例代码: ```ruby puts "请输入你最喜欢的颜色:...

    ruby-blackjack:简单的Ruby控制台游戏

    "ruby-blackjack"项目就是一个基于Ruby实现的简单黑杰克(Blackjack)游戏。黑杰克是一种流行的纸牌游戏,目标是在不超出21点的情况下尽可能接近这个数字。让我们深入探讨一下这个项目中的相关知识点。 1. **Ruby...

    SEIR-ruby-blackjack-1:SEIR RUTH组1 Ruby 21点游戏

    5. **条件判断**:Ruby中的`if`语句和`case`语句在游戏逻辑中扮演重要角色,比如判断玩家是否爆牌,庄家是否必须继续要牌直到达到17点等。 6. **循环与迭代**:游戏过程可能涉及多次迭代,如玩家和庄家轮流要牌,这...

    Ruby语言教程.docx

    通过系统学习Ruby语言的基本原理、编程技巧以及实践应用,不仅可以成为一名合格的Ruby程序员,还能在Web开发、脚本编程等多个领域发挥重要作用。希望每位学习者都能在Ruby语言的学习过程中不断进步,最终成为该领域...

    Ruby入门教程中文PDF 附实例

    Ruby还是一个面向对象的语言,每个值都是一个对象,包括基本类型如数字和字符串。类和对象是Ruby的核心概念,你可以自定义类并创建实例。例如,创建一个名为`Person`的类并初始化姓名: ```ruby class Person def ...

    ruby使用文档

    - Ruby的一个著名应用是Web开发框架Rails,它遵循MVC架构,提供许多便利的工具和约定。 以上只是Ruby编程基础的一部分,深入学习还需结合实际项目和具体API类库的使用。在阅读这份英文文档时,你可以借助翻译工具...

    Ruby on Rail 基础知识 一张纸

    本篇文章旨在提供一个关于Ruby on Rails基础知识的概览,帮助初学者快速上手。 #### 二、方法概述 在Ruby on Rails中,方法是执行特定任务的基本单元。以下列举了一些常用的方法: 1. **字符串处理方法**: - `...

    Ruby In a Nutshell

    - `if`、`unless`用于条件判断,`case`语句提供多条件分支。 - `for`、`while`、`until`用于循环,`each`迭代器是Ruby中常用的遍历工具。 - `break`、`next`和`redo`控制循环流程。 3. **函数和方法** - Ruby中...

    ruby 程序设计

    - **文档工具**:ri是一个内置于Ruby中的文档查看器,可以帮助开发者查阅内置类和方法的文档。 ##### §2.5 RubyGems - **包管理系统**:RubyGems是一个用于管理和分发Ruby软件包的系统,类似于Python的pip。 ####...

    ruby 中文 教程 从入门到精通

    - **编写第一个程序**:创建一个简单的Ruby程序,例如输出“Hello, World!”,可以帮助初学者快速了解Ruby的基本语法。 - **集成开发环境**:选择合适的IDE或编辑器(如RubyMine、Visual Studio Code等),可以提高...

Global site tag (gtag.js) - Google Analytics