类,属性和方法的点表示法是什么意思?

时间:2018-02-22 11:06:34

标签: matlab class oop

我是编程的新手,除了使用Matlab的基本功能多年(操纵数组,线性代数,函数,脚本等),并且最近开始探索程序的面向对象方面(这也是我第一次进入任何面向对象的编程!)。

我现在最大的问题是理解这个点符号意味着什么。例如,假设我写了简单的类

classdef alchemy
    properties
        element
    end

    methods
%   CONSTRUCTOR
        function e = alchemy
            e.element = '    ';
        end
    end
end

e.element实际意味着什么?然后输入命令行

e.element = 'LEAD'

将字符串'LEAD'分配给类element的属性alchemy的一个实例....为什么要这样做?

现在说我添加方法

        function e = transmute(e)
            oldElem = e.element;
            if oldElem == 'LEAD'
                e = 'GOLD';
            elseif oldElem == 'GOLD'
                e = 'LEAD';
            else
                disp('Oh no! This is a non-transmutable element.');
            end
        end

我现在可以放入命令行e = e.transmute,它将返回

e =

GOLD

使用点表示法在情况下发生了什么?为什么e.transumte将函数transmute应用于e?我对这整个表示法感到困惑,Matlab的帮助页面都没有给我任何更深刻的印象。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

点表示法用于对象的属性/属性或用于调用方法。

它有两个含义。

 name_object.abc
如果abc是name_object的属性,

将给你abc的值,或者如果abc是一个方法,它将在name_object上调用abc。

答案 1 :(得分:0)

Matlab中的类(或对象)是propertiesmethods的集合。

可能令人困惑的是你的方法transmute接受了对象(它应该)但返回一个与原始对象具有相同变量名的字符串。它或多或少是"获得"方法。不是转化对象。

以这种方式返回转化后的对象。

function e = transmute(e)
    switch e.element 
        case 'LEAD'
            e.element = 'GOLD';
        case 'GOLD'
            e.element = 'LEAD';
        otherwise
            disp('Oh no! This is a non-transmutable element.');
    end
end

你也可以这样调用这个方法:

e = transmute(e)

等于

e = e.transmute