成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ruby慣用法總結概覽

開發 開發工具
我們這次為大家介紹的Ruby慣用法包括:迭代;||=賦值 ;程序入口;預設變量和特殊記號;求和;交換等等。我們將會對此做一個詳細介紹。

Ruby最近是一個比較熱門的詞匯,許多程序員都開始將目光轉向這項語言。它存在著許多慣用法,下面就向大家總結了一些Ruby慣用法,作為參考對象。#t#

迭代

一般寫法:

for i in (1..10) puts i end

習慣寫法:

(1..10).each{|i| puts i}

1.upto(10){|i| puts i} # from njmzhang

||=賦值

一般寫法:

number = 1 if number.nil? number = 1 unless number

習慣寫法:

number ||= 1

程序入口

if __FILE__ == $0

if $PROGRAM_NAME == __FILE__

這個相當于main(), 邏輯判斷的意思當程序名($0或另一個)和當前文件名(__FILE__)一致時,也就是當前文件是被單獨執行的而不是被別的文件調用。這個方法還有個用法是作為unit test使用。

預設變量和特殊記號

類似$0的Perl風格預設常量還有很多,參見Programming Ruby p319

其中比較常用的如$:代表庫搜索路徑,修改方法常見有: 代碼$:.unshift('buildscript') # from gigix 或 $: << File.join(File.dirname(__FILE__), 'CurrentClass')

后一種方法使用了相對路徑,因為Ruby的module不要求namespace和文件目錄結構要對應一致,很多時候統統放一個目錄里
%w格式化命令(from qiezi) 可以少打幾個引號

%w{a b c d} #

等價

['a', 'b', 'c', 'd']

``(~鍵下的撇號)用來執行shell外部命令,如:

`help`
inject

一般寫法:

result = [] (1..10).each{|item| result << item}

習慣寫法:

(1..10).inject([]){|array, item| array << item}

inject有點難理解,相當于python的reduce和一些FP里的fold。inject的塊變量有兩個(這里是array和 item),第二個變量(item)用來枚舉被inject的集合(這里是(1..10)這個range), 而第一個變量(array)由inject的參數初始化(這里是[],可選),并在block被反復執行時保持持久(相當于靜態變量),而item則在每 次枚舉時被更新為下一個值。

我們再看一下inject的另一種通常用法就會更明白了:

求和

(1..10).inject{|sum, item| sum += item}

這個等于

(1..10).inject(0){|sum, item| sum += item}

也就是塊變量sum被初始化成0然后反復迭代執行塊的內容,最后返回sum,并行賦值 這個很多人都知道了,比如:

a,b = 0, 1 a,b = b, a #

交換

a,b

當然可以延伸出一些很詭異的變化,不提倡使用阿。

還有一個用法是讓函數返回“多個結果”(不是多個對象),如:

def test 1,2 end x, y = test #x = 1, y = 2

這個njmzhang說的很對,其實函數返回的是一個array,然后再并行匹配到變量上去。(所以我對多個結果特別加了引號) 這顯然是個syntax sugar,你隨便用逗號分割幾個變量是不會自動組成array的。

注意這種并行匹配當兩遍不平衡時會造成的問題:

a,b = [1,2,3] # a = 1, b = 2, 3

被丟棄

a,b,c = [1,2] # a = 1, b = 2, c = nil

被初始化成nil

*的匹配 一般來說*用于把一個array展開:

a, *b = [1,2,3] #a = 1, b = [2,3]

類似FP里的x:xs(haskell), x::xs(ocaml), [a | b] (erlang from 布娃娃)

rescue簡單用法

begin 1/0 rescue puts 'wrong' end

可以簡化為

1/0 rescue puts 'wrong'

責任編輯:曹凱 來源: 百度博客
相關推薦

2015-07-13 09:46:44

Java習慣用法

2009-12-17 13:46:01

Ruby表單語句

2011-06-09 15:15:52

RAII

2017-09-05 09:17:47

Java編程用法總結

2024-02-01 00:10:21

C++PIMPL編程

2010-01-26 17:05:37

Android缺點

2009-12-29 13:43:26

WPF URI

2009-12-24 13:46:03

WPF控件

2024-02-02 12:42:42

C++Policy模板

2015-12-28 13:45:53

Windows 10照片應用

2009-12-14 15:04:32

Ruby性能特點

2009-12-07 16:44:45

PHP圖形處理函數

2010-03-05 16:38:48

Python應用范圍

2009-12-23 18:16:35

WPF布局控件

2009-12-16 14:40:14

Ruby控制結構

2009-12-17 14:29:50

Ruby on Rai

2009-12-14 17:48:46

Ruby String

2009-12-17 11:27:31

Ruby時間方法

2010-01-20 17:54:13

VB.NET特殊字符

2010-01-06 18:13:58

.NET Framew
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久 | 亚洲永久免费观看 | 国产在线高清 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 久久午夜精品 | 中文字幕日韩一区 | 91精品一区二区三区久久久久久 | 青青草在线播放 | 成人影视网| 狠狠爱网址 | 久久久久久国产 | 一区二区福利视频 | 中文字幕在线看 | 在线看中文字幕 | 欧美视频在线播放 | 欧美一区二区在线视频 | 黄色亚洲网站 | 久久精品国产一区老色匹 | 亚洲成人精品国产 | 亚洲精品视频在线播放 | 在线亚洲欧美 | 国产美女特级嫩嫩嫩bbb片 | 在线一区观看 | 一区二区三区高清在线观看 | 亚洲精品福利在线 | 国产精品成人免费 | 国产午夜精品一区二区 | 精品一区二区三区在线观看国产 | 国产专区视频 | 国产精品久久国产精品久久 | 黑人精品| www.av7788.com| 伊人狠狠操 | 伊人久久麻豆 | 久久草在线视频 | 成人午夜免费福利视频 | 91久久久久久久久久久 | 欧美黄色一级毛片 | 精品欧美一区二区三区 | 91精品久久久久久久久 | 欧美午夜精品久久久久免费视 |