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 does the which function behave in MATLAB / 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.
GPU behavior
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 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 of using which in MATLAB / RunMat
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.
See also
Source & Feedback
- Source code: `crates/runmat-runtime/src/builtins/introspection/which.rs`
- Found a bug? Open an issue with a minimal reproduction.