在 MATLAB 中准备命令

Prepare command in MATLAB

在 MATLAB 中有没有办法以编程方式准备命令(即直接将命令写入命令​​提示符)以便用户可以通过按 enter 来执行它?

我想实现自己的 "Did you mean:" 功能,该功能已内置于 MATLAB 中。

简短的回答是。这不能如你所愿地完成。您要做的是将文本写入 MATLAB 的 stdin 并让它保持原样。本质上是管道的修改形式。

MATLAB 中可用的最接近的选项是 Evaluate Selection,当您 select 文本时,您可以使 MATLAB 在命令提示符下执行它。 MATLAB 将此文本准确地放在您想要的位置,但它也会立即执行它。似乎没有办法停止此操作或以编程方式模拟其功能。

在 MATLAB 中写入 stdin 是不允许的,正如您在

中看到的那样
>> fprintf(0, 'help conv')
Error using fprintf
Operation is not implemented for requested file identifier.

其中 0 表示 stdin1 表示 stdout2 表示 stderr。另一个天真的尝试是使用 fopen()

>> fid = fopen(0, 'w');
Error using fopen
Invalid filename.

但这也失败了。但是,我们可以从第一次尝试中看出您想要什么

is not implemented

获得您想要的东西的唯一选择是可能有一些 MATLAB hackery 的能力,但我不知道它或任何人甚至尝试过它。 编辑 提供了我正在谈论的 MATLAB hackery 解决方案。


最接近你想要的是使用hyperlinks to run MATLAB commands like

>> disp('Did you mean: <a href="matlab:conv(a,b)">conv()</a>')
Did you mean: conv()

ans =

     12

其中 conv() 是一个超链接,点击它会执行 conv(a,b) 其中 a = 3;b = 4; 在这个例子中。

可以使用来自 Matlab 的 Java 来 以编程方式生成关键事件 ,按照

假设您想要 "prepare" 的命令是 dir。然后

commandwindow; %// make Matlab command window have focus
robot = java.awt.Robot; %/ Java Robot class
robot.keyPress (java.awt.event.KeyEvent.VK_D); %// key press event
robot.keyRelease (java.awt.event.KeyEvent.VK_D); %// key release event
robot.keyPress (java.awt.event.KeyEvent.VK_I);
robot.keyRelease (java.awt.event.KeyEvent.VK_I);
robot.keyPress (java.awt.event.KeyEvent.VK_R);
robot.keyRelease (java.awt.event.KeyEvent.VK_R);

将在命令 window 上输入 dir,就好像用户自己写的一样。然后按 Enter 将 运行 命令。