which — Identify which variable, builtin, script, class, or folder RunMat will execute for a given name.
which name reports exactly which entity RunMat will call when you invoke name. It follows MATLAB's search order:
1. Variables in the current workspace 2. Builtin functions 3. Class folders and classdef files 4. MATLAB files on the RunMat path (.m, .mlx, etc.) 5. Folders
The builtin accepts the same flags as MATLAB: -all, -builtin, -var, and -file.
How which works in RunMat
- Names can be supplied as character vectors or string scalars. Calling
whichwith no name raiseswhich: not enough input arguments. which namewithout options returns the first match respecting MATLAB's precedence rules.which(name, "-all")(orwhich("-all", name)) returns a cell array with every match on the search path, in discovery order, without duplicates.which(..., "-builtin")restricts the search to builtin functions."-var"restricts to workspace variables, and"-file"restricts the search to files, classes, and folders.- Package-qualified names like
pkg.funcautomatically map to+pkgfolders. Class lookups recognise both@ClassNamefolders and.mfiles containingclassdef. - Relative paths are resolved against the current working directory. Absolute paths and paths beginning with
~or drive letters are honoured directly.
How which runs on the GPU
which performs string parsing and filesystem inspection on the host CPU. If you pass GPU-resident strings (for example, gpuArray("sin")), RunMat gathers them automatically before evaluating the request. Results are always host-resident character arrays or cell arrays. Acceleration providers do not implement kernels for this builtin.
GPU memory and residency
No. which gathers GPU arguments implicitly and never produces device-resident output. There is no benefit in moving strings to the GPU before calling which.
Examples
Finding a built-in function's implementation
which("sin")Expected output:
built-in (RunMat builtin: sin)Checking if a workspace variable shadows a builtin
answer = 42;
which("answer")Expected output:
'answer' is a variable.Listing all matches on the path
which("sum", "-all")Expected output:
{
[1,1] = built-in (RunMat builtin: sum)
[2,1] = //runmat/stdlib/sum.m
}Locating a script or function file
which("helpers/process_data")Expected output:
//projects/runmat/helpers/process_data.mRestricting the search to variables
which("-var", "velocity")Expected output:
'velocity' is a variable.Restricting the search to files
which("fft", "-file")Expected output:
//runmat/overrides/fft.mFAQ
What happens when nothing is found?
which returns the character vector '<name>' not found. just like MATLAB.
Are method lookups supported?
Methods defined via @Class folders or classdef files are discovered through the class search. Package-qualified methods are supported.
Does which canonicalise paths?
Yes. RunMat reports canonical absolute paths where possible; when canonicalisation fails, the original path is returned.
Can I combine -all with other options?
Yes. For example, which("plot", "-all", "-file") lists every file-based implementation without reporting builtins or variables.
Does the search respect RUNMAT_PATH / MATLABPATH?
Yes. The directory list mirrors the logic used by other REPL filesystem builtins.
What about Simulink models or Java classes?
File-based matches with supported extensions (.slx, .mdl, .class, etc.) are reported when present on the path.
Are duplicate results filtered?
Yes. The first occurrence of each unique path is returned.
Is the lookup case sensitive?
No. Matching is case-insensitive on all platforms, following MATLAB semantics.
Does which gather GPU values?
Yes. GPU-resident arguments are automatically gathered before the search begins.
Related functions to explore
These functions work well alongside which. Each page has runnable examples you can try in the browser.
exist, ls, dir, copyfile, class, isa, ischar, isstring, who, whos
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how which works, line by line, in Rust.
- View which.rs on GitHub
- Learn how the runtime works
- Found a bug? Open an issue with a minimal reproduction.
About RunMat
RunMat is an open-source runtime that executes MATLAB-syntax code — faster, on any GPU, with no license required.
- Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
- Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
- A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.