详解Ruby当中的算数运算

Ruby支持一系列丰富的运算符的一个现代化的语言。大多数运算符实际上是方法调用。例如,a + b的被解释为a,
+(b)变量引用的对象的方法被称为一个用b作为它的参数。

对于每个运算符 (+ - * / % ** & | ^ << >> && ||), 有相应的赋值运算符缩写形式 (+= -= 等)
Ruby算术运算符:

假设变量a=10,变量b=20:

 Ruby比较操作符:

假设变量a=10,变量b=20:

 Ruby赋值运算符:

假设变量a=10,变量b=20:

 Ruby并行赋值:

Ruby还支持并行赋值的变量。这使得多个一行Ruby代码来初始化变量。例如:

a = 10
b = 20
c = 30

需要更迅速声明,使用并行赋值:

a, b, c = 10, 20, 30

并行赋值交换两个变量的值也是有用的:

a, b = b, c

Ruby位运算符:

位运算符位和位操作执行位。

假设当a =60和b=13;现在以二进制格式将如下:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a = 1100 0011

支持Ruby语言的位运算符

 Ruby逻辑运算符:

支持Ruby语言的逻辑运算符

假设变量a=10,变量b=20:

 Ruby三元运算符:

还有一个运算符称为三元运算符。这首先计算一个表达式为true或false值,然后执行一个计算结果来决定两个语句的哪一个。条件运算符的语法如下:

 Ruby范围运算符:

Ruby中的序列范围是用来创建连续值 - 组成了开始值/结束值,并在两者之间的值的范围内。

在Ruby中,创建这些序列使用“..”和“...”范围运算符。这两个点的形式建立一个包容性的范围,而三个点的形式创建了一个范围,不包括指定的最大值。

 Ruby defined? 操作符:

defined是一个特殊的操作符采取的形式的方法调用,以确定是否通过表达式定义。如果没有被定义的表达式,它返回一个描述字符串求解出的表达式或nil

有很多种用法 defined操作符:
用法 1

defined? variable # True if variable is initialized

例如 :

foo = 42
defined? foo  # => "local-variable"
defined? $_   # => "global-variable"
defined? bar  # => nil (undefined)

用法 2

defined? method_call # True if a method is defined

例如 :

defined? puts    # => "method"
defined? puts(bar)  # => nil (bar is not defined here)
defined? unpack   # => nil (not defined here)

用法 3

# True if a method exists that can be called with super user
defined? super

例如 :

defined? super   # => "super" (if it can be called)
defined? super   # => nil (if it cannot be)

用法 4

defined? yield  # True if a code block has been passed

例如 :

defined? yield  # => "yield" (if there is a block passed)
defined? yield  # => nil (if there is no block)

Ruby "." 双冒号 "::" 运算符:

调用一个模块方法,通过模块的名称和句点它的名字前,引用一个常数使用该模块的名称和两个冒号。
::使得一元运算符,常数,实例方法和类方法在类或模块定义,从任何地方访问外的类或模块。
请记住:在Ruby中,类和方法可以被视为常数。只需要前缀::Const_name的表达式返回相应的类或模块对象。
如果没有前缀表达式时,主要对象类默认情况下使用。
这里有两个例子:

MR_COUNT = 0    # constant defined on main Object class
module Foo
 MR_COUNT = 0
 ::MR_COUNT = 1  # set global count to 1
 MR_COUNT = 2   # set local count to 2
end
puts MR_COUNT    # this is the global constant
puts Foo::MR_COUNT # this is the local "Foo" constant

Second Example:

CONST = ' out there'
class Inside_one
  CONST = proc {' in there'}
  def where_is_my_CONST
   ::CONST + ' inside one'
  end
end
class Inside_two
  CONST = ' inside two'
  def where_is_my_CONST
   CONST
  end
end
puts Inside_one.new.where_is_my_CONST
puts Inside_two.new.where_is_my_CONST
puts Object::CONST + Inside_two::CONST
puts Inside_two::CONST + CONST
puts Inside_one::CONST
puts Inside_one::CONST.call + Inside_two::CONST

Ruby运算符优先级

下表列出了所有运算符从最高优先级到最低。

注: 方法列一个是运算符实际上是方法,因此可能会被改写。

(0)

相关推荐

  • Ruby基础知识之类

    创建类: class后跟类名,其中类名的首字母必须要大写.实例化时,通过new方法实例化.在c#中有构造器,构造器与类同名.在ruby中,构造器为initialize方法.当通过new方法实例化一个类对象后,会自动调用initialize方法,把new中的参数传递给initialize方法进行初始化.在c#中的域,在ruby中称为实例变量,定义时前边加@前缀,表示是一个实例变量. 复制代码 代码如下: class Customer     def initialize(name,age)    

  • 使用Ruby on Rails和PostgreSQL自动生成UUID的教程

    Rails 4 能原生态的支持Postgres 中的UUID(Universally Unique Identifier,可通用的唯一标识符)类型.在此,我将向你描述如何在不用手工修改任何Rails代码的情况下,用它来生成UUID. 首先,你需要激活Postgres的扩展插件'uuid-ossp': class CreateUuidPsqlExtension < ActiveRecord::Migration def self.up execute "CREATE EXTENSION \&

  • 简单介绍Ruby on Rails对PostgreSQL数组类型的支持

    我非常高兴在宣布Rails 4.0 现在支持 PostgreSQL数组类型. 你可以方便的在migration通过 :array => true里创建数组类型的字段. 创建数组类型的字段的时候还可以添加其它的选项(length,default,等等) create_table :table_with_arrays do |t| t.integer :int_array, :array => true # integer[] t.integer :int_array, :array =>

  • 详解Ruby当中的算数运算

    Ruby支持一系列丰富的运算符的一个现代化的语言.大多数运算符实际上是方法调用.例如,a + b的被解释为a, +(b)变量引用的对象的方法被称为一个用b作为它的参数. 对于每个运算符 (+ - * / % ** & | ^ << >> && ||), 有相应的赋值运算符缩写形式 (+= -= 等) Ruby算术运算符: 假设变量a=10,变量b=20:  Ruby比较操作符: 假设变量a=10,变量b=20:  Ruby赋值运算符: 假设变量a=10,变量

  • 详解Ruby中正则表达式对字符串的匹配和替换操作

    正则匹配 说起Ruby当然要提起它的正则表达式机制,正则表达式作为一个强大的匹配语言已经越来越多的使用到不同的领域当中,从字符串验证,匹配,到网页抽取等.虽然有些人诟病与正则表达式的匹配效率,但是考虑到正则的强大匹配能力也就无所谓了. 说起Ruby正则表达式不就不能不说起Ruby的=~和match两种匹配方式,我们还是用实例来说明一下这两种匹配方式的区别吧.先来说一说=~的用法吧: message="afhadhffkdf414j" regex=/[a-z](\d{3})[a-z]/

  • 详解Ruby中的单件方法和单件类

    单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = "just a regular string" def str.title? self.upcase == self end str.title? # => false str.methods.grep(/title?/) # => [:title?] str.singleton_methods #=> [:title?] str.class # => S

  • 详解Ruby中的块的知识

    语法: block_name{ statement1 statement2 .......... } 在这里,将学习如何通过使用一个简单的 yield 语句调用块.还将学习使用yield语句具有参数调用块.将检查的示例代码,这两种类型的 yield 语句. yield 语句: 让我们来看看在yield语句的一个例子: #!/usr/bin/ruby def test puts "You are in the method" yield puts "You are again

  • 详解Ruby中的循环语句的用法

    Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code end 当 conditional 为真时,执行 code.while 循环的 conditional 通过保留字 do.一个换行符.反斜线 \ 或一个分号 ; ,来与 code 分离开. 实例 #!/usr/bin/ruby $i = 0 $num = 5 while $i < $num do puts("

  • 详解Ruby中范围的概念

    范围无处不在:1月至12月,0至9日,50至67行,依此类推. Ruby支持范围,并允许我们使用多种方式的范围: 作为序列范围 作为条件范围 作为区间范围 作为序列范围: 首先,也许是最自然的使用范围来表达序列.序列有一个起点,一个终点和序列中的连续值的方法来生产. Ruby创建'' ..''和'' ...''范围内运算符使用这些序列.这两个点的形式建立一个包容性的范围,而三个点的形式创建了一个范围,不包括指定的高值. (1..5) #==> 1, 2, 3, 4, 5 (1...5) #==>

  • 详解Ruby语言中的注释用法与中文编码问题

    Ruby 注释 注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行.您可以在行首使用字符( # ): # 我是注释,请忽略我. 或者,注释可以跟着语句或表达式的同一行的后面: name = "Madisetti" # 这也是注释 您可以注释多行,如下所示: # 这是注释. # 这也是注释. # 这也是注释. # 这还是注释. 下面是另一种形式.这种块注释会对解释器隐藏 =begin/=end 之间的行: =begin 这是注释. 这也是注释. 这也是注释. 这还是注释.

  • 详解Ruby中的方法概念

    Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def meth

  • 详解VMware 当中出现:无法将 Ethernet0 连接到虚拟网络"VMnet8"的问题

    此文,是通过查阅各位大神的经验总结得出的小小的结论,只是为了记录自己在学习过程中,遇到的问题而写,假若能帮到大家,十分荣幸~ 当VMvare出现 :无法将 Ethernet0 连接到虚拟网络"VMnet8"的问题 出现本问题的情况,是在存在主机(物理机)WIN7系统,在主机的基础上,搭建虚拟机VMware(ubuntu server系统 )~ 目前,本人知道的解决方案: 1.选中VMvare中的编辑选项,进入虚拟网络编辑器,查看VMnet8是否启用! 选中还原默认设置,之后从新启动虚拟

  • 详解Ruby设计模式编程中对单例模式的运用

    简介       单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一个对象成为系统中的唯一实例.要实现这一点,可以从客户端对其进行实例化开始.因此需要用一种只允许生成对象类的唯一实例的机制,"阻止"所有想要生成对象的访问.使用工厂方法来限制实例化过程.这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义. 要点       显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例.    

随机推荐