一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - Ruby中對一元操作符重載實例

Ruby中對一元操作符重載實例

2020-04-14 10:36junjie Ruby

這篇文章主要介紹了Ruby中對一元操作符重載實例,實例說明如何對一元操作符進行重載,需要的朋友可以參考下

一元操作大家都知道,就是表達式的操作符只有一個輸入值。這個在C和Java中都很常見。今天我們要探討一下Ruby中的一元操作符重載。
一元操作符有:+ – * ! & 等,為了避免與數值的 + – 混淆,重載一元操作符,要在后面加上一個 @ 操作符。

1. 一個簡單的一元操作符重載例子:-@ 操作符
我們以String類為例子。String默認沒有定義 – 操作符:

 

復制代碼 代碼如下:

1.9.3p125 :027 > a = "Hello"

 

=> "Hello"

1.9.3p125 :028 > -a

NoMethodError: undefined method `-@' for "Hello":String

from (irb):28

from ~/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `'

1.9.3p125 :029 >

 

我們通過Open Class的方式(Open Class可參考)給類型為String的a對象,加上一元操作:

復制代碼 代碼如下:

 

1.9.3p125 :029 > def a.-@;downcase;end;

1.9.3p125 :036 > a
=> “Hello”
1.9.3p125 :037 > -a
=> “hello”
1.9.3p125 :038 >


從上面代碼看到我們已經將 – 這個操作符添加到了a對象中。

 

2. 其他的操作符:+@, ~, !
我們再次使用Open Class的特性,給String類加上方法:

復制代碼 代碼如下:

 

 #!/usr/local/ruby/bin/ruby

 class String

 def -@

 downcase

 end


 def +@

 upcase

 end


 def ~

 # Do a ROT13 transformation - http://en.wikipedia.org/wiki/ROT13

 tr 'A-Za-z', 'N-ZA-Mn-za-m'

 end


 def to_proc

 Proc.new { self }

 end


 def to_a

 [ self.reverse ]

 end

 end


 str = "Teketa's Blog is GREAT"

 puts "-#{str} = #{-str}"

 puts "+#{str} = #{+str}"

 puts "~#{str} = #{~str}"

 puts "#{str}.to_a = #{str.to_a}"

 puts %w{a, b}.map &str

 puts *str


上面代碼的運行結果:

 

 

復制代碼 代碼如下:

-Teketa's Blog is GREAT = teketa's blog is great

 

+Teketa's Blog is GREAT = TEKETA'S BLOG IS GREAT

~Teketa's Blog is GREAT = Grxrgn'f Oybt vf TERNG

Teketa's Blog is GREAT.to_a = ["TAERG si golB s'atekeT"]

Teketa's Blog is GREAT

Teketa's Blog is GREAT

TAERG si golB s'atekeT

 

我們注意到,*和&操作符,是通過to_a 和 to_proc來重載的,在Ruby中,要重載*和&就是通過重載to_a和to_proc方法來實現的。

延伸 · 閱讀

精彩推薦
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
主站蜘蛛池模板: 国产精品亚洲精品日韩已方 | 日本加勒比在线播放 | 精品视频在线观看 | chinese国产老太性 | 男女xxoo做爰猛烈动态一 | 草莓丝瓜芭乐樱桃榴莲色多黄 | 亚洲电影第1页 | 9999视频 | 国产福利一区二区精品视频 | 国产精品一区牛牛影视 | 精品视频免费 | 亚洲精品无码不卡在线观看 | 精品99在线观看 | 日本黄色一区 | 国产精品久久久久久久人人看 | 亚洲精品一区二区三区在线观看 | 毛片亚洲毛片亚洲毛片 | 亚洲日本va中文字幕 | αv在线视频 | 久久机热视频 这里只有精品首页 | 996免费视频国产在线播放 | 国产精品久久久久毛片真精品 | 欧美一二 | 国产成人精品在线 | free性俄罗斯护士 | 亚洲第五色综合网啪啪 | 亚洲国产成人久久99精品 | yellow高清视频日本动漫 | 星空传媒在线视频 | 国产青草视频在线观看免费影院 | 鸥美三级| 青青青视频蜜桃一区二区 | 高清在线一区二区 | 操日日 | 国产精品www| 啾咪成人漫画免费 | 午夜国产 | 国产91在线精品 | 武侠艳妇屈辱的张开双腿 | 亚洲 欧美 成人 | 免费观看毛片视频 |