[英]Why do I not need the extra lines of code? Ruby Codeacademy
我正在 Codeacademy 學習 Learn Ruby(面向對象的編程 II:私人。遠離!)。
為什么我不需要在最后一部分的“def id”方法之后包含“(id_name)”?
我的嘗試在頂部代碼中進行了演示,但 Codeacademy 解決方案告訴我我的方法是錯誤的,正確的方法要簡潔得多——如底部所示。
class Dog
def initialize(name, breed)
@name = name
@breed = breed
end
public
def bark
puts "Woof!"
end
private
def id (id_number)
@id_number = id_number
id_number = 12345
end
end
正確的版本
private
def id
@id_number = 12345
end
end
為什么我不需要在最后一部分的“def id”方法之后包含“(id_name)”?
我假設您的意思是(id_number)
– 這就是我們所說的方法參數。
基於建議的解決方案:
def id
@id_number = 12345
end
...似乎此方法應該將實例變量@id_number
設置為固定值12345
。 為此,您不需要任何來自外部的價值。
但是,您可以通過以下方式將值傳遞給方法:
def id(value)
@id_number = value
end
但是現在,您必須在調用該方法時傳遞一個值。 省略它會導致ArgumentError
,這可能會破壞現有代碼。
第三種選擇是使用默認值作為參數:
def id(value = 12345)
@id_number = value
end
這使得參數可選。 如果您傳遞一個值,它將被分配給@id_number
。 否則(即,如果您在不傳遞參數的情況下調用該方法)將使用值12345
。
請注意, value
只是一個名稱,您也可以使用任何其他名稱,例如id_number
。 請記住, id_number
和@id_number
是不同的變量。 前者是局部變量,后者是實例變量。
關於您的代碼:
def id(id_number)
@id_number = id_number
id_number = 12345
end
這會將傳遞的參數值分配給@id_number
。 然后它將12345
分配給局部變量id_number
,從而覆蓋其先前的值。 但是,由於變量在賦值后從未使用過,所以該行是多余的。 您的代碼等效於:
def id(id_number)
@id_number = id_number
end
這與我上面的第二個示例相同。 (只是用另一個參數名稱)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.