日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ruby学习-第二章

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ruby学习-第二章 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第二章

類繼承,屬性,類變量

1.如何聲明一個子類

class Treasure < Thing

這樣Thing類中的屬性name,description都被Treasure繼承

?

2.以下三種方式傳入父類initialize方法的參數分別是什么?

# This passes a, b, c to the superclassdef initialize( a, b, c, d, e, f )super( a, b, c ) end# This passes a, b, c to the superclassdef initialize( a, b, c )super end# This passes no arguments to the superclassdef initialize( a, b, c)super() end

?

第一種把參數中a,b,c傳入父類initialize方法;第二種傳入全部參數,但不加上括號;第三種不傳入參數

?

3.屬性的setter/getter

有人這樣寫setter/getter:

puts( t1.get_description )
t1.set_description( “Some description” )

這樣似乎更方便一些:

puts( t1.description ) t1.description = “Some description”

如果你想用第二種寫法,你不得不這么寫:

def description return @description end def description=( aDescription ) @description = aDescription end

注:這是正確的:def name=(aName)

  但這卻是錯的:def name ?=(aName)

你看出差別的了嗎?

?

根據上一章,你可以知道,這里定義了兩個方法:description方法和description=方法。原來是通過將"="加入方法名實現的,ruby真是神奇,Java就不能這樣寫。

?

然而,事實上有更簡單的方法來實現setter/getter

attr_reader :description attr_writer :description

由一個attr_reader/attr_writer加上符號(:description)構成,事實上,可以一次為多個元素設置setter/getter

attr_writer(:name, :description)
attr_accessor(:value, :id, :owner)

attr_accessor

等價于:

attr_reader :value

attr_writer :value

?

4.super

和Java不一樣,Ruby中的super方法可以出現在任何方法中,而不只是initialize(構造方法)中。

在第2點中就對super方法的使用有介紹,單獨的super將所有參數傳給父類initialize,而帶參數的super則將指定參數傳給父類initialize。

# This passes aName, aDescription to the superclass def initialize( aName,aDescription )super( aName, aDescription ) end# This passes a, b, c to the superclass's aMethod def aMethod( a, b, c )super end

?

5.常量和嵌套類(constants?& nested class)

class XA = 10class Ydef xyzputs( "goodbye" )endenddef self.abcputs("hello")end end

?

常量:以大寫字母開頭的變量。

如果要訪問常量或內部類,需用 ::

puts( X::A ) X::abc # 你也可以用::來調用方法 X.abc # 當然這樣也可以 ob = X::Y.new ob.xyz

?

6.部分類(Partial Class)

在Ruby中可以對現存的類進行修改,并影響已經生成的對象

class Adef aputs 'a'end enda = A.new a.public_methods(false)//打印A class所有public的方法 # => [:a] //只有aclass Adef bputs 'b'end enda.public_methods(false) # => [:a, :b]//有a和b

而不能修改的,是類繼承了哪個類。比如

class Adef aputs 'a'end endclass A < Stringdef cputs 'c'end end
# TypeError: superclass mismatch for class A
# 所有類默認繼承了Object類,A也繼承了Object,所以當你讓A繼承String時就會報錯

?

轉載于:https://www.cnblogs.com/andrew-chen/p/4192176.html

總結

以上是生活随笔為你收集整理的Ruby学习-第二章的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。