簡體   English   中英

為什么我不需要額外的代碼行? Ruby 代碼學院

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM