boat_1 = { "name" => "S.Minnow", "color" => "white", "price" => 20000 }
boat_2 = { "name" => "Titanic", "color" => "black", "price" => 700000000 }
class Boat
def initialize(name, color, price)
@name = name
@color = color
@price = price
end=結束。
def name
@name
end>
def color
@color
end
def boat_2(text)
@color = text
end
end
boat_1 = Boat.new("S. S. Minnow", "白色", 20000 )
boat_2 = Boat.new("Titanic", "black", 700000000)
p boat_1
p boat_2
p boat_1.name
boat_2.color = "red"
我不確定我是否只是沒有正確的方法措辭
。這里是我的訓練營的實際問題,如果這有幫助的話
重寫這兩個哈希值,用一個類代替。同時寫出檢索名稱和顏色的方法,以及另一個重新定義顏色的方法。說實話,我以為這將是一個簡單的問題,只需將一個新的值傳遞到哈希中,但到目前為止,我所嘗試的一切都沒有成功。
uj5u.com熱心網友回復:
首先,對于在屬性上撰寫瑣碎的讀取器和寫入器,我認為你應該使用attr_reader、attr_writer或者同時使用attr_accesors
。說了這么多,我覺得你的代碼是正確的,但是你在顏色上的寫入方法必須是 def attriute_name=() blah blah end,請注意名字里的=符號。
class Boat>
def initialize(color, name, price)
@color = color
@name = name
@price = price
end=結束。
def name
@name
end>
def color
@color
end
def color=(color)
@color = color
end
end end
zand using it:
[2] pry(main)>
[8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* [8] pry(main)* => 。 color=
[9] pry(main)> b = Boat.new "red", "Pete", 56.
=> #<Boat:0x00007f9d7534c230 @color="red", @name="Pete", @price=56>
[26] pry(main)> b.color= "blue"
=> "blue"35] pry(main)> pp b
#<船:0x00007f9d7534c230 @color="blue", @name="Pete", @price=56>
=> #<Boat:0x00007f9d7534c230 @color="blue", @name="Pete", @price=56>
uj5u.com熱心網友回復:
我不確定我是否理解這個問題,但這是我認為的一個答案。
我們得到了兩個哈希值:
我們得到了兩個哈希值。
boat_1 = { "name"=>"S.Minnow", "color"=>"white", "price"=> 20000 }
boat_2 = { "name"=>"Titanic", "color"=> "black", "price"=>700000000 }
例如,如果我們希望獲得boat_1的鍵"color"的值,我們將寫
boat_1["name"/span>]
#=> "S. S. Minnow"
其中#=>指定了實體方法Hash#[]的回傳值,該鍵是該方法的引數。
類似地,如果我們希望將"color"的值改為,例如,"red",我們可以使用方法Hash#[]=:
boat_1["color"/span>] = "red"/span>
我猜測問題是希望你創建一個類,比如說,"boat"(當然,名字并不重要),并創建該類的兩個實體,命名為boat1和boat2,并展示你將如何對這些實體執行與上面顯示的兩個哈希值相當的操作。
你可以這樣寫這個類:
你可以這樣寫:
class Boat
attr_accessor :color
attr_reader :name, :pray
def initialize(name, color, price)
@name = name
@color = color
@price = price
end=結束。
end end
當類定義被決議時,類方法Module#attr_reader被呼叫到self(等同于Boat)。該方法只是創建了兩個實體方法:
def name
@name
end
def price
@priceend
這些方法被稱為getters。
類似地,當類定義被決議時,類方法Module::attr_accessor也被呼叫到self。它同時創建了一個獲取器:
def color
@color
end
和一個setter(實體方法):
def color=(new_color)<
@color = new_color
end>
我想強調的是,attr_accessor、attr_reader(和Module::attr_writer)只是為了方便編碼者提供的;如果Ruby核心中沒有提供它們,編碼者將簡單地撰寫任何需要的getters和setters。
然后我們將創建問題中所示的實體。
boat_1 = Boat.new("S. S. Minnow"/span>, "white"/span>, 20000)
#=> #<Boat:0x00007ff90c1d2358 @name="S. S. Minnow", @color="white",)
# @price=20000>/span>
boat_2 = Boat.new("Titanic", "black", 7000000)
#=> #<Boat:0x00007ff90c1c03d8 @name="Titanic", @color="black",)
# @price=700000000>/span>
為了獲得boat1的鍵"name"的值,我們將寫:
boat_1.name
#=> "S. S. Minnow"
為了改變boat_1的鍵"color"的值為 "red",我們要寫:
boat_1.color = "red"。
#=> "red"
boat_1
#=> #<Boat:0x00007ff90c1d2358 @name="S. S. Minnow", @color="red,
# @price=20000>/span>
這是否意味著哈希值和類在任何意義上都可以互換?答案是 "不"。
假設我們希望在現有的哈希中添加一個鍵值對。我們可以使用前面提到的Hash#[]方法:
boat-1["length"/span>] = 6.2
如果要對一個類做類似的事情,我們需要重寫類的定義(如果是動態完成的話,這是不可能的)。
如果我們希望洗掉哈希中的鍵值對,我們可以使用Hash#delete方法:
boat_1.delete("price"/span>)
同樣,如果要在一個類中做到這一點,我們將不得不重寫類的定義。
假設我們希望改變鍵"name"的值。通過哈希值,我們將寫:
boat_1[:name] = "Pinta"
如果我們試圖對類的實體進行這樣的處理,我們會得到以下結果:
boat_1.name = "Pinta"。
#=> NoMethodError: undefined method 'name=' for #<Boat:0x00007ff90c1d2358>/span>
這可能是使用類而不是哈希的一個原因,如果編碼者不希望這個值被改變的話。
顯然,我們可以用哈希值做很多事情,而這些事情并不適合于類實體(例如合并兩個哈希值),反之亦然。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332395.html
標籤:
上一篇:Regex在雙引號中分割字串
