遺囑

遺囑

學習練習

簡介

命名空間

使用命名空間是組織程式碼的重要方法。 類別和模組都能提供命名空間。 兩個方法可能發生命名衝突,只要把它們放進不同的命名空間就能解決。 命名空間可以巢狀,這有助於組織大型程式碼庫。 存取命名空間要透過作用域解析運算子::。

下面的範例展示了兩個不同的foo方法。 在它們前面加上各自的命名空間,就能一起使用。

class MyNamespace
  def self.foo
    44
  end

  class MyInnerNamespace
    def self.baz
      90
    end
  end
end

class MyOtherNamespace
  def self.foo
    -2
  end
end

p MyNamespace::foo + MyOtherNamespace::foo * MyNamespace::MyInnerNamespace::baz  # => -136

請注意,命名空間的解析取決於執行程式碼的位置。 若要指向根命名空間裡的東西(也就是所有已定義命名空間之外),請以::開頭。

例如:

class Example
  def self.example
    5
  end
end

class MyNamespace

  class Example
    def self.example
      10
    end
  end

  def self.call_example
    p Example::example  # => 10
    p ::Example::example  # => 5
  end
end

說明

你在一間專門處理特殊遺囑委託的知名律師事務所工作。

在這個練習中,你將要打開一座神祕的保險庫。 你是這份遺產的執行人,必須組合三個家族長久保管的祕密代碼,才能取得一組帳號和對應的密碼。

為了防止任何一個家族獨自打開保險庫,必須結合他們的資訊,再加上你從遺囑中得知的祕密修飾值,才能打開它。

你有三個任務,全都和協助這些家族打開保險庫有關。

1. 在家族面前就座,並攤開你的文件

定義一個名為 EstateExecutor 的命名空間。 接下來幾個任務的程式碼,都應該定義在 EstateExecutor 命名空間的主體內。

class SomeName
  # The space between the class/module name
  # and the `end` keyword
  # is called body of the  namespace.
end

2. 找出祕密帳號

這是你大顯身手的時刻。 只有你握有能揭開祕密帳號的祕密修飾值。

定義 assemble_account_number(secret_modifier) 方法,它接受型別為 Integer 的祕密修飾值作為引數,並回傳 Integer 型別的組合後帳號。

要取得正確的號碼,你必須把三個家族的 bank_number_part 加總起來。

3. 最後一步:輸入祕密代碼

遺囑中的指示要求你先將所有藍色片段相加,再將所有紅色片段相加。 得到的代碼,則是將這兩個總和相乘。

定義 assemble_code 方法,把三個家族的片段組合成單一的 Integer 結果,並回傳得到的代碼。 這個方法不接受任何引數,只依賴各家族相關命名空間中的資訊。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Ruby Exercism

準備好開始 遺囑 了嗎?

註冊 Exercism,透過 21 個概念121 個練習 和真人引導來學習並精通 Ruby,全部免費。