首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs/Matlab:类Auto/方法块中函数的自动缩进

Emacs/Matlab:类Auto/方法块中函数的自动缩进
EN

Stack Overflow用户
提问于 2015-09-28 12:51:40
回答 1查看 594关注 0票数 1

在使用类the样式的面向对象代码规范的matlab文件的Emacs (v.24.3.1,matlab.el v.3.3.2)中,我遇到了几个自动缩进问题。

在下面的第一个示例文件中,以标记为%%%%% (1)的行开头的部分缩进太多了。不正确的缩进一直持续到函数关闭end为止.

在第二个文件中,%%%%% (2)%%%%% (3)上的函数是递增缩进的--太多了。在这里,不正确的缩进一直持续到方法-关闭end。(但是,如果我删除前面函数的注释--关闭end,这个特殊的问题就会消失。)

还有一个语法突出显示问题(未显示在下面),其中函数头function modulus = get.Modulus(obj)不被识别为函数头。

有谁有解决办法的建议吗?我的问题是配置问题,还是这与matlab.el中的一个bug相对应?

我已经将我的.emacs简化为只包含以下行:

代码语言:javascript
复制
(add-to-list 'load-path "~/emacs/matlab-emacs")
(require 'matlab-load)
(setq matlab-indent-function-body t)
(setq matlab-functions-have-end t)

TestUnit.m.m:

代码语言:javascript
复制
classdef TestUnit
    enumeration
        mm (1)
        pixels (2)
        in (4)
    end

    methods
        function s=asstring(p)
        %ASSTRING Return string version of TestUnit object.

            [a,b]=enumeration(p);
                s=b{find(a==p,1,'first')}; %%%%% (1)
            end
    end
end

TensileData.m:

代码语言:javascript
复制
classdef TensileData
    properties
        Material = 'carbon steel';
        SampleNumber = 0;
        Stress
        Strain
    end

    properties (Dependent)
        Modulus
    end

    methods
        function td = TensileData(material,samplenum,stress,strain)
            if nargin > 0
                td.Material = material;
                td.SampleNumber = samplenum;
                td.Stress = stress;
                td.Strain = strain;
            end
        end % TensileData
    end % methods

    methods
        function obj = set.Material(obj,material)
            if ~(strcmpi(material,'aluminum') ||...
                 strcmpi(material,'stainless steel') ||...
                 strcmpi(material,'carbon steel'))
                error('Material must be aluminum, stainless steel, or carbon steel')
            end
            obj.Material = material;
        end % Material set function

            function modulus = get.Modulus(obj) %%%%%% (2)
                ind = find(obj.Strain > 0); % Find nonzero strain
                modulus = mean(obj.Stress(ind)./obj.Strain(ind));
            end % Modulus get function

                function obj = clear(obj)       %%%%%%% (3)
                % Another test function
                    obj.Stress=[]; obj.Strain=[];
                end
    end % methods
end % classdef

下面的内容是通过启动emacs -Q TestUnit.m,然后是M-x octave-modeC-x h M-C\生成的。以下关键字具有语法突出显示:endfunctionasstring,但没有classdefenumerationmethods

代码语言:javascript
复制
classdef TestUnit
enumeration
mm (1)
pixels (2)
in (4)
end

methods
function s=asstring(p)
  %ASSTRING Return string version of TestUnit object.
  a=enumeration(p);
  s=b{find(a==p,1,'first')};
end
end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-28 14:59:44

FWIW,内置的Octave模式似乎正确地缩进了第二个示例。在第一个例子中,它也会在enumeration(p)调用中被捕获。我对octave.el有一个临时补丁,它修复了示例的缩进,但对Matlab/Octave不太了解--我不知道您的“枚举”函数来自何处,所以很难知道什么才是正确的解决方案。它是一个标准函数,还是可以自己定义?这是否也适用于其他关键字(例如,是否也有"classdef“函数)?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档