如何纠正matlab错误:在此上下文中不允许使用函数定义

时间:2015-05-20 09:04:03

标签: matlab

function [output] = english2morse(text)

% Where a = 1, b = 2, c = 3 ...                                                                                                                                                                            space     numberals start here... 0 - 9                                                       specials characters start here: in this order| begining     . , ? ! : " ' =       end                                                                                                                                                                                                                   
definitions = {' .-' ' -...' ' -.-.' ' -..' ' .' ' ..-.' ' --.' ' ....' ' ..' ' .---' ' -.-' ' .-..' ' --' ' -.' ' ---' ' .--.' ' --.-' ' .-.' ' ...' ' -' ' ..-' ' ..-' ' .--' ' -..-' ' -.--' ' --..' '        '   '-----' '.----' '..---' '...--' '....-' '.....' '-....' '--...' '---..' '----.'     '.-.-.-' '--..--' '..--..' '..--.' '---...' '.-..-.' '.----.' '-...-'};


output = definitions(text);
end

clc
clear
i = 1;

% Asks user for txt, and checks to see if the input is valid, ifnot, get
% new user input, else break while loop and continue program exectution.

while i == 1

    disp('Program converts strings to morce code. ONLY ACCEPTS: A-Z a-z 0-9   , . , ? ! : " `')

    pause(1)

    text = input('Enter a string: ', 's');
    text = lower(text)
    disp('Checking to see if correct values entered.')
    converted = zeros(1, length(text))
    for x = 1:length(text)
        % for lowercase
        if text(x) >= 97 && text(x) <= 122

            % for numberals 0-9
            converted(x) = double(text(x) - 96);

            i = 0;
        elseif  text(x) >= 48 && text(x) <= 57
            converted(x) = text(x) - 20

            i = 0;
            % for special characters, listed above
        elseif text(x) == 46 ||  text(x) == 44 ||  text(x) == 63 ||  text(x) == 33 ||  text(x) == 58 ||  text(x) == 34 ||  text(x) == 39 ||  text(x) == 61
            switch text(x) == 46 ||  text(x) == 44 ||  text(x) == 63 ||  text(x) == 33 ||  text(x) == 58 ||  text(x) == 34 ||  text(x) == 39 ||  text(x) == 61
                case text(x) == 46
                    converted(x) = text(x) - 8
                case text(x) == 44
                    converted(x) = text(x) - 5
                case text(x) == 63
                    converted(x) = text(x) - 23
                case text(x) == 33
                    converted(x) = text(x) + 8
                case text(x) == 58
                    converted(x) = text(x) - 16
                case text(x) == 34
                    converted(x) = text(x) + 9
                case text(x) == 39
                    converted(x) = text(x) +5
                case text(x) == 61
                    converted(x) = text(x) - 16
            end

            i = 0;

        else

            i = 1;

        end

    end

end
disp(converted)
disp(english2morse(converted))

1 个答案:

答案 0 :(得分:5)

请从脚本中删除以下部分,并将其保存在名为english2morse.m的文件中:

function [output] = english2morse(text)

% Where a = 1, b = 2, c = 3 ...                                                                                                                                                                            space     numberals start here... 0 - 9                                                       specials characters start here: in this order| begining     . , ? ! : " ' =       end                                                                                                                                                                                                                   
definitions = {' .-' ' -...' ' -.-.' ' -..' ' .' ' ..-.' ' --.' ' ....' ' ..' ' .---' ' -.-' ' .-..' ' --' ' -.' ' ---' ' .--.' ' --.-' ' .-.' ' ...' ' -' ' ..-' ' ..-' ' .--' ' -..-' ' -.--' ' --..' '        '   '-----' '.----' '..---' '...--' '....-' '.....' '-....' '--...' '---..' '----.'     '.-.-.-' '--..--' '..--..' '..--.' '---...' '.-..-.' '.----.' '-...-'};


output = definitions(text);
end

删除后保存脚本,编辑后保存该功能,再次运行脚本。

说明: MATLAB在功能脚本之间有所区别。

一个MATLAB代码文件,其中第一个非注释关键字是function是一个函数,即通常等待某些输入的一段代码,基于此返回一些输出,并介绍两者之间的一些东西。每次调用函数时,所有输入,输出和临时数据都在其自己的函数工作空间中创建。

一个文件 - 不接受最终评论 - 不以function(或classdef开头)是一个脚本,并且打算立即执行,使用任何可用的数据。 全局工作区,并将其输出存储在同一个全局工作区中。

现在,MATLAB并不想将函数定义与脚本混合在一起。这就是为什么函数应该在它自己的文件中,并且脚本在它自己的文件中。