【问题标题】:semicolons or not in Matlab / Octave function bodies?Matlab / Octave函数体中是否有分号?
【发布时间】:2015-02-06 20:14:45
【问题描述】:

考虑Octave / Matlab中的以下两个函数;它们之间的唯一区别是正文中的行是否以分号结尾:

function [a, b, c] = fooNoSemicolons (x, y, z)
  a = x * 42
  b = y + 42
  c = (x * y) / (z * 42)
endfunction

function [a, b, c] = fooSemicolons (x, y, z)
  a = x * 42;
  b = y + 42;
  c = (x * y) / (z * 42);
endfunction

现在考虑以下调用及其输出:

fprintf ("no semicolons: \n"); disp (fooNoSemicolons (12, 13, 14));
fprintf ("done\n");
fprintf ("semicolons:    \n"); disp (fooSemicolons (12, 13, 14));
fprintf ("done\n");
no semicolons:
a =  504
b =  55
c =  0.26531
 504
done
semicolons:
 504
done

显然,这两个函数产生相同的答案,即 a 的值,即 504,但我不太明白内部是否存在语义不同的东西。

我无法在 Matlab / Octave 中找到有关分号含义的文档,但我已经做了一些实验,但没有得到太多启发:

fprintf ("noSemicolons: \n");
[someA, someB, someC] = fooNoSemicolons (12, 13, 14);
fprintf ("done\n"); 
disp ([someA, someB, someC]);

fprintf ("semicolons:\n");
[moreA, moreB, moreC] = fooSemicolons (12, 13, 14);
fprintf ("done\n");
disp ([moreA, moreB, moreC]);

fprintf ("noSemicolons: \n");
otherStuff = fooNoSemicolons (12, 13, 14);
% otherStuff apparently does not get bound to an array or vector!
disp (otherStuff);
fprintf ("done\n"); 

fprintf ("semicolons:\n");
moreStuff  = fooSemicolons (12, 13, 14);
% moreStuff apparently does not get bound to an array or vector!
fprintf ("done\n"); 
disp (moreStuff);
noSemicolons:
a =  504
b =  55
c =  0.26531
done
   504.00000    55.00000     0.26531
semicolons:
done
   504.00000    55.00000     0.26531
noSemicolons:
a =  504
b =  55
c =  0.26531
 504
done
semicolons:
done
 504

【问题讨论】:

  • 在命令窗口中输入help punct。这是学习 Matlab 的前五分钟通常会学到的东西。
  • 您的问题似乎已得到正确回答。请注意,如果您使用的是 MATLAB 的许可副本,那么您应该可以通过您的 MATLAB 帐户访问免费的 2 小时在线培训课程。它很好地概述了基础知识,包括分号。
  • 我正在使用八度,但试图留在它的 Matlab 子集中。我正在处理从 DSL 生成的代码,因此要深入研究并以由内而外的方式来解决它,而不是像学生那样从头到尾。
  • 遗憾的是,@horchler help punct 在 Octave 中不起作用。

标签: matlab octave


【解决方案1】:

在 Matlab/Octave 代码的行尾放置分号可防止控制台打印答案/变量分配/其他任何内容。

x=5

将 x 设置为 5 并打印 x 的值。

x=5;

将 x 设置为 5。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2015-07-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多