老师参与

既然MATLAB是弱类型语言,那么sym()方法是否涉及重载

澄碧钓徒 发表于2019年10月19日
<p>MATLAB不像C++/Java那样能直接根据参数个数或参数类型实现函数重载,参数个数的重载要用内置变量varargin和nargin,那么像sym()方法的参数既可以是数值又可以是字符串,传入不同类型的参数是否要用到重载?还是跟Python类似不用考虑形参数据类型?<br ></p>
1 回复

    1楼

  • LiuWG 发表于2019年10月20日
    1 | 3 | 举报
    <p>没有那么复杂,sym就是创建符号量的一个函数。</p><p>&gt;&gt; help sym</p><p>sym - Create symbolic variables, expressions, functions, matrices</p>
    LiuWG 发表于2019年10月20日
    • 澄碧钓徒 2019年10月20日
      0 | 举报
      <p>老师,如果是自己定义函数参数有数值型和字符串两种要怎样实现重载?试了下用class()方法判断行不通?看网上讲MATLAB符号计算其实就是运算符重载,还有我发现刘老师好像C/C++/Python有些实现细节方面的东西会深究而MATLAB的就没有?<br ></p>
      澄碧钓徒 发表于2019年10月20日
      0 | 举报
    • LiuWG 2019年10月20日
      1 | 举报
      <p>如果感兴趣可以分析sym.m源文件。</p><p>要说重载,下面也算重载的一种形式吧。</p><code class="brush:cpp;toolbar:false" >function&nbsp;f=mul(x,y,z)&nbsp; if&nbsp;nargin&nbsp;==&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=x+y;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=x+y+z;&nbsp; end</code><p><br ></p><p>&gt;&gt; mul(1:3,4:6)</p><p><br ></p><p>ans =</p><p><br ></p><p>&nbsp; &nbsp; &nbsp;5&nbsp; &nbsp; &nbsp;7&nbsp; &nbsp; &nbsp;9</p><p><br ></p><p>&gt;&gt; mul(1:3,4:6,[-1,0,-2])</p><p><br ></p><p>ans =</p><p><br ></p><p>&nbsp; &nbsp; &nbsp;4&nbsp; &nbsp; &nbsp;7&nbsp; &nbsp; &nbsp;7</p>
      LiuWG 发表于2019年10月20日
      1 | 举报
    • LiuWG 2019年10月21日
      1 | 举报
      <p>从起源讲,MATLAB是一个基于矩阵计算的科学计算软件,C开始是为了写操作系统,引入面向对象机制后发展到C++,还包括其他很多高级语言,都有各自产生背景和语言特点,功能上很难一一对应(尽管现代程序设计语言有趋同的趋势)。建议在学习和应用时抓住各种语言的主体特征就行。</p>
      LiuWG 发表于2019年10月21日
      1 | 举报
    添加评论