> ## Documentation Index
> Fetch the complete documentation index at: https://docs.projectreal.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# hookmetamethod

> Sucht eine metamethod function auf einem value und hookt diese function über hookfunction. Das first argument kann jeder value sein, den raw metafield lookup akzeptiert. Das second argument muss ein string metamethod name sein, und das third argument muss eine function replacement sein. Wenn raw metafield lookup das named metafield nicht findet, löst die function "Metamethod doesn't exist" für argument 2 aus. Wenn das metafield existiert, aber keine function ist, löst sie "Metamethod isn't a function" für argument 2 aus. Wenn das metafield eine function ist, ruft hookmetamethod hookfunction mit der found metamethod function als target auf und gibt die cloned original closure von hookfunction zurück.

<div className="real-function-page">
  ```lua theme={null}
  hookmetamethod(object: any, metamethod: string, replacement: function): function
  ```

  ## Argumente

  <ParamField path={"object"} type={"any"} required>
    Value, dessen methods mit raw metafield lookup geprüft wird.
  </ParamField>

  <ParamField path={"metamethod"} type={"string"} required>
    Metafield name, der an raw metafield lookup übergeben wird.
  </ParamField>

  <ParamField path={"replacement"} type={"function"} required>
    Function, die als replacement für die found metamethod function an hookfunction übergeben wird.
  </ParamField>

  ## Rückgaben

  <ResponseField name={"original"} type={"function"}>
    Cloned original metamethod closure, die von hookfunction zurückgegeben wird.
  </ResponseField>

  ## Beispiel

  Hook an existing metamethod function.

  ```lua theme={null}
  local object = setmetatable({}, {
      __index = function(_, key)
          return key
      end,
  })

  local original
  original = hookmetamethod(object, "__index", function(self, key)
      if key == "Name" then
          return "Real"
      end

      return original(self, key)
  end)
  ```
</div>
