> ## 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

> Recherche une metamethod function sur une value et hook cette function with hookfunction. Le first argument peut être toute value acceptée par raw metafield lookup. Le second argument doit être un string metamethod name, et le third argument doit être une function replacement. Si raw metafield lookup ne trouve pas le named metafield, la function lève "Metamethod doesn't exist" pour argument 2. Si le metafield existe mais n'est pas une function, elle lève "Metamethod isn't a function" pour argument 2. Lorsque le metafield est une function, hookmetamethod appelle hookfunction avec la found metamethod function comme target et renvoie la cloned original closure de hookfunction.

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

  ## Arguments

  <ParamField path={"object"} type={"any"} required>
    Value dont le methods est inspecté avec raw metafield lookup.
  </ParamField>

  <ParamField path={"metamethod"} type={"string"} required>
    Metafield name passé à raw metafield lookup.
  </ParamField>

  <ParamField path={"replacement"} type={"function"} required>
    Function passée à hookfunction comme replacement pour la found metamethod function.
  </ParamField>

  ## Retours

  <ResponseField name={"original"} type={"function"}>
    Cloned original metamethod closure renvoyée par hookfunction.
  </ResponseField>

  ## Exemple

  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>
