用逗号分隔的列表赋值变量

123次(最近30天)
broken_arrow
broken_arrow 2021年4月7日
评论道: 斯蒂芬。 2021年7月27日
我在理解逗号分隔列表的行为方面有些困难。考虑
一个=结构(“数量”细胞(5));
如果我想把数字从1分配到5,我必须引入一个辅助单元格数组:
数量= num2cell (1:5);
[A.number] =数字{:};
直接的方式
(A.number) = 1, 2, 3, 4, 5;
尽管数字{:}和1,2,3,4,5在命令行输入时返回完全相同的结果,但它不起作用。这是为什么呢?是否有比使用辅助单元格数组更有效的方法将向量或数组的值分配给结构体?

接受的答案

斯蒂芬。
斯蒂芬。 2021年4月7日
编辑:斯蒂芬。 2021年4月7日
“为什么呢?”
答案非常简单:显式语法
X, Y, Z
被认为是三个独立的评估,就像你把它们写在不同的三行:
X
Y
Z
这在 逗号的文档 ,也在 用于输入语句的文档 ,州 你也可以通过分隔语句在同一行上输入多个语句。为了区分命令,每个命令都以逗号或分号结尾。以逗号结尾的命令显示结果,而以分号结尾的命令则不会显示结果。” 这意味着你将得到完全相同的错误,即使你只是试图分配一个数组在RHS上的多个数组/位置在LHS:
当然,我们不能将一个数组分配给三个数组!但我们可以通过简单地用返回足够输出的函数替换第一个参数来让它工作(并演示到底发生了什么):
>> A = struct(“数量”细胞(1、3));
> > (A。数量= X, 2、3
一个=
1 x3结构数组字段:
数量
ans =
2
ans =
3.
> > A.number
ans =
1
ans =
ans =
注意,2和3将被解析、显示和丢弃!我使用的函数如下所示:
函数[x, y, z] = x ()
x = 1;
y =正;
z =南;
结束
相反,由单元格数组或结构生成的逗号分隔的列表都是索引形式,这意味着它们最终调用 subsref ,它显然可以返回多个输出(就像一般MATLAB函数一样)。作为 subsref 是内置的,我们不能轻易地添加断点:(
我的猜测是,这仅限于RHS显式编写的逗号分隔列表,但这只是猜测。
简介:
  • RHS上以逗号分隔的显式列表请求第一个列表参数的所有输出。
  • 生成的逗号分隔列表(尝试)返回相同数量的输出subsref按照LHS的要求。
3评论
斯蒂芬。
斯蒂芬。 2021年4月7日
“我认为这只是一个设计决策的问题。”
同意了。使用逗号分隔表达式求值和使用逗号分隔列表的语法之间存在冲突,解决该冲突可能是一个设计决策。
"所以subsref的输出只在nargout==0时返回,就像一个逗号分隔的列表"
如果nargout = = 0 subsref 将不返回任何内容,这不是人们通常使用逗号分隔列表的原因。
与任何函数一样,提供的输出数量为 需求驱动的 (不超过内部指定的数字)。

登录评论。

答案(1)

布鲁诺陈德良
布鲁诺陈德良 2021年4月7日
使用 交易
>> A = struct(“数量”细胞(5));
> >一个
一个=
1×5结构数组字段:
数量
> > n = 1:5;
> > c = num2cell (n);
> > [A.number] =交易(c {:})
一个=
1×5结构数组字段:
数量
> > A.number
ans =
1
ans =
2
ans =
3.
ans =
4
ans =
5
>>
5个评论
斯蒂芬。
斯蒂芬。 2021年7月27日
(b2。BarWidth] =交易(0.4);

登录评论。

标签

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!