我不知道我该如何正确地问这个问题。希望你能明白我的意思。我在 Matlab 中有一个代码,我有不同的过程。例如,如果我使用某种类型的图像(例如,*.bmp),我必须在 Matlab 中运行一些代码,如果我有另一种类型的图像(*.jpg),我想运行另一部分代码。
但是,我想做的是在代码的开头 Matlab 询问“什么样的图像?” (例如,使用命令“disp”),然后我会编写“bmp”或“jpg”并运行相关代码。我不喜欢使用循环,只是“写”这个词,它可以识别过程。
我该怎么做?
我不知道我该如何正确地问这个问题。希望你能明白我的意思。我在 Matlab 中有一个代码,我有不同的过程。例如,如果我使用某种类型的图像(例如,*.bmp),我必须在 Matlab 中运行一些代码,如果我有另一种类型的图像(*.jpg),我想运行另一部分代码。
但是,我想做的是在代码的开头 Matlab 询问“什么样的图像?” (例如,使用命令“disp”),然后我会编写“bmp”或“jpg”并运行相关代码。我不喜欢使用循环,只是“写”这个词,它可以识别过程。
我该怎么做?
使用函数式结构化编程:
function [some output args] = someFunction([some input args])
answer = [ask question here]
switch lower(answer)
case 'bmp'
[some (other) output args] = bmpfunction([some (other) input args]);
case 'jpg'
[some (other) output args] = jpgfunction([some (other) input args]);
otherwise
error('Unsupported image format.');
end
end
function [some output args] = bmpfunction([some input args])
...
[bmp operations]
...
end
function [some output args] = jpgfunction([some input args])
...
[jpg operations]
...
end
把这一切都放在一个文件中。然后您可以通过键入在 Matlab 中调用该函数
someFunction([some input args])
当然,[some input args]
等等应该在任何地方用实际有用的实体替换:)
您可能想要使用以下内容:
prompt = "What type of image? "
strResponse = input(prompt, 's')
switch strResponse
...
一种优雅的方法是面向对象工作。然后您可以使用函数重载 - 并完全保存 switch 语句。
像这样:
classdef JpegImage
methods
function myFunction(obj)
...
jpegfunction
end
end
end
classdef BmpImage
methods
function myFunction(obj)
...
bmpfunction
end
end
end
在您的代码中,您可以在myFunction(x)
不检查 x 类型的情况下使用。