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

目錄

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

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

http://yzkb.51969.com/

一、腳本語(yǔ)言

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

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

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

二、調(diào)用命令

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

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

ls -al

EOC

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

三、外部傳參

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

puts ARGV.class

puts ARGV.first

puts ARGV.last

puts ARGV[1]

? 如果在 zsh 中輸入

ruby argv.rb 1 2 3

? 那么輸出是

Array

1

3

2

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

四、輸入輸出

? 輸出比較簡(jiǎn)單的是 puts 類似于 C 語(yǔ)言中 puts(有種傳言說(shuō) 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

? 輸入沒(méi)有細(xì)致探討過(guò),似乎這個(gè)是可以的

# 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 的還好用,語(yǔ)法有點(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 語(yǔ)句塊

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

do |x|

x *= x

puts x

end

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

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

grades.each do |name, grade|

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

end

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

grades.each (do |name, grade|

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

end)

6.3 整數(shù)

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

6.4 Array

? 聲明形式是這樣的

a = [1, 2, 3, 4]

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

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

? 對(duì)于數(shù)組的索引訪問(wèn),跟 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"]

? 同時(shí)有了一堆好用的操作符

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),但是這個(gè)似乎被當(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

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

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)識(shí)符里的標(biāo)點(diǎn)符號(hào)

$var # 全局變量

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

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

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

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

九、迭代器

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

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

yield @a[i]

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

do |e| puts e end

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

for i in 0...@a.size

puts @a[i]

end

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

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

def sequence(n, step, c)

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

yield i * step + c

end

end

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

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

http://yzkb.51969.com/

精彩鏈接

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

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

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

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

發(fā)布評(píng)論

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

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

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

文章目錄