欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:博客 Ruby設(shè)計-基礎(chǔ)語法

柚子快報激活碼778899分享:博客 Ruby設(shè)計-基礎(chǔ)語法

http://yzkb.51969.com/

一、腳本語言

? 我似乎對于 Python 和 Ruby 強(qiáng)求太多了,我要讓他們實現(xiàn) C 的所有功能。他們確實可以實現(xiàn)所有的功能,但是他們的目的不是為了這個。

? 我也可以用 shell 實現(xiàn)很多復(fù)雜的算法,但是我絕對不會用他去寫圖著色或者動態(tài)規(guī)劃。但是我使用 python 和 Ruby 的時候卻又這種傾向。我不會強(qiáng)求 C 為我列出目錄中的所有文件,但是我卻會強(qiáng)求 python,可嘆啊。

? 我之前似乎把語言看成了算法和架構(gòu)的載體和實現(xiàn),怪不得過得這么不幸福。

二、調(diào)用命令

? 神奇用法,可以直接調(diào)用 ls 這樣的指令。

print <<`EOC` # 執(zhí)行命令

ls -al

EOC

? 這或許進(jìn)一步說明了它就是個腳本。

三、外部傳參

? ruby 的腳本調(diào)用的時候是可以傳參的,下面的腳本

puts ARGV.class

puts ARGV.first

puts ARGV.last

puts ARGV[1]

? 如果在 zsh 中輸入

ruby argv.rb 1 2 3

? 那么輸出是

Array

1

3

2

? 就是將后面的輸入視為一個數(shù)組,原理比較顯然。

四、輸入輸出

? 輸出比較簡單的是 puts 類似于 C 語言中 puts(有種傳言說 ruby 特意模仿了一些 C)。如果想要格式化輸出,也是可以的,見下

# format output

puts "Hello %s" %["cnx"]

puts "Hello %c" %[65]

puts "Hello %x" %[2147483648]

months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"

puts months

? 輸入沒有細(xì)致探討過,似乎這個是可以的

# input

a = gets.chomp

puts a

五、文件操作

? 跟 C 依然很像,太像了

filename = ARGV.first

script = $0

puts "Opening the file..."

target = File.open(filename, 'w')

puts "Truncating the file. Goodbye!"

target.truncate(target.size)

puts "Now I'm going to ask you for three lines."

print "line 1: "; line1 = STDIN.gets.chomp()

print "line 2: "; line2 = STDIN.gets.chomp()

print "line 3: "; line3 = STDIN.gets.chomp()

puts "I'm going to write these to the file."

target.write(line1)

target.write("\n")

target.write(line2)

target.write("\n")

target.write(line3)

target.write("\n")

puts "And finally, we close it."

target.close()

src = File.open(filename, "r")

indata = src.read()

puts "The input file is #{indata.length} bytes long"

puts "The input data is "

puts indata

六、數(shù)據(jù)結(jié)構(gòu)

6.1 Hash

? HashMap 的意思,感覺比 Java 的還好用,語法有點(diǎn)像 C++。

grades = {'CNX' => 100, 'QS' => 0, 'LSZ' => 120}

puts grades['CNX']

grades['QS'] = 20

grades.each do |name, grade|

puts "#{name} : #{grade}"

end

6.2 語句塊

? 這是一個很有意思的東西,就是我們可以定義一個被叫做“塊“的結(jié)構(gòu),有兩種寫法

do |x|

x *= x

puts x

end

{|x| x *= x; puts x}

然后這個塊結(jié)構(gòu)就可以作為函數(shù)參數(shù)傳參了(感覺有點(diǎn)函數(shù)式和匿名函數(shù)的意思了),比如說這個

grades.each do |name, grade|

puts "#{name} : #{grade}"

end

? 其實是作為 hash 的 grades 對象調(diào)用 each 方法,這個方法有一個參數(shù),就是這個塊

grades.each (do |name, grade|

puts "#{name} : #{grade}"

end)

6.3 整數(shù)

? 取整的時候是向下取整,而不是向零取整,這點(diǎn)與 C 或者 Java 不同,但是與 Python 相同。

6.4 Array

? 聲明形式是這樣的

a = [1, 2, 3, 4]

? 有的時候還可以騷一點(diǎn)

a = Array.new(4) {|i| i + 1}

? 對于數(shù)組的索引訪問,跟 python 一樣強(qiáng)大,支持負(fù)數(shù)。

puts a[0] # 1

puts a[-1] # 4

? 和 python 一樣,支持切片

b = Array.new(5) {|i| (i + 'A'.ord).chr}

printf "%s\n", b # "A", "B", "C", "D", "E"]

printf "%s\n", b[1, 3] # ["B", "C", "D"]

printf "%s\n", b[2..4] # ["C", "D", "E"]

? 同時有了一堆好用的操作符

c = [1, 2, 3]

puts c.to_s # [1, 2, 3]

c += [4, 5, 1]

puts c.to_s # [1, 2, 3, 4, 5, 1]

c -= [1, 4, 5]

puts c.to_s # [2, 3]

c *= 3

puts c.to_s # [2, 3, 2, 3, 2, 3]

c << 5

puts c.to_s # [2, 3, 2, 3, 2, 3, 5]

6.5 Range

? 似乎 python 中也有這種結(jié)構(gòu),但是這個似乎被當(dāng)成了獨(dú)立的一種內(nèi)置的數(shù)據(jù)結(jié)構(gòu)

(1..5) #==> 1, 2, 3, 4, 5

(1...5) #==> 1, 2, 3, 4

('a'..'d') #==> 'a', 'b', 'c', 'd'

6.6 Symbol

? 符號,就是編譯原理里符號表里的那個符號,Ruby 的神奇就在于可以直接在程序中定義這個符號,方法是加個標(biāo)識符

a = :s

puts a

b = :"s"

puts b

puts b.equal?a # true

七、注釋

單行注釋

# There is a single line comment

多行注釋

=begin

There are comments.

There are comments.

There are comments.

There are comments.

=end

八、標(biāo)識符里的標(biāo)點(diǎn)符號

$var # 全局變量

@var # 實例變量,就是面向?qū)ο笾袑傩缘囊馑?/p>

@@var # 類變量,就是 Java 中靜態(tài)屬性的意思

empty? # 'empty?' 是方法的名字,如果以 ? 結(jié)尾,說明這個方法返回值是布爾值

sort! # 'sort!' 是方法的名字,如果以 ! 結(jié)尾,說明這個方法會改變對象本身,而不是返回一個被改變的 clone

九、迭代器

? 這里的迭代器其實不是一個 Java 或者 cpp 中出現(xiàn)的跟指針一樣可以自增的東西,而是一個方法,這個方法接受一個代碼塊作為參數(shù)。這里利用了關(guān)鍵詞 yield 。示例如下,我模擬了一個數(shù)組,然后實現(xiàn)了它的迭代器方法 each

class MyArray

def initialize(a)

@a = a

end

def each

for i in 0...@a.size

yield @a[i]

end

end

end

a = [1, 2, 3]

my_a = MyArray.new(a)

my_a.each do |e|

puts e

end

? 可以看到,對于 each 方法,在實現(xiàn)中進(jìn)行了遍歷,但是并沒有說明遍歷要干什么,只是有一個

yield @a[i]

? 對于這個情況, yield 會調(diào)用我們傳給他的代碼塊,也就是

do |e| puts e end

? 然后給形參 e 賦值 @a[i] ,然后對于數(shù)組中的每個元素有一個 puts e 的操作,相當(dāng)于這個

for i in 0...@a.size

puts @a[i]

end

? 可以看到代碼塊的這種方式,大大拓展了原有函數(shù)的功能。

? 我們可以再看一個例子,這個例子不是類中的例子,而就是普通的一個方法,用于輸出一個等差數(shù)列。

def sequence(n, step, c)

(0..n).each do |i|

yield i * step + c

end

end

sequence(5, 3, 2) {|x| puts x}

柚子快報激活碼778899分享:博客 Ruby設(shè)計-基礎(chǔ)語法

http://yzkb.51969.com/

精彩鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18875256.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄