【发布时间】:2019-04-27 05:47:29
【问题描述】:
我只是想在 Squeak (Smalltalk) 中进行分配,但我不知道如何创建具有特定行数和列数的矩阵。
我知道可以使用A := Matrix new:3. 之类的东西创建一个 3x3 矩阵,但我需要一个 3x2 矩阵之类的东西。系统浏览器对我理解如何做到这一点没有多大帮助,而且我已经在互联网上搜索了一段时间,也没有找到任何帮助。谁能给出一个示例代码行来说明如何创建类似 3x2 矩阵的东西?
【问题讨论】:
我只是想在 Squeak (Smalltalk) 中进行分配,但我不知道如何创建具有特定行数和列数的矩阵。
我知道可以使用A := Matrix new:3. 之类的东西创建一个 3x3 矩阵,但我需要一个 3x2 矩阵之类的东西。系统浏览器对我理解如何做到这一点没有多大帮助,而且我已经在互联网上搜索了一段时间,也没有找到任何帮助。谁能给出一个示例代码行来说明如何创建类似 3x2 矩阵的东西?
【问题讨论】:
您应该了解 Smalltalk 如何处理构造函数 - 始终检查 Class 类。
如果您检查Matrix class,您会发现#new: 内部使用^ self rows: dimension columns: dimension。这意味着您的:
aMatrix := Matrix new:3
确实如此
aMatrix := Matrix rows: 3 columns: 3,恰好是您正在搜索的内容。
在我看来,#new: 消息不是一个好的选择。我更喜欢#squareSize: 或类似的东西。
注意:不要对变量使用大写字母(根据您的A := 分配进行评论)
编辑:为什么不对局部/实例变量使用大写字母?
开头的大写字母是为全局变量保留的。你有 Transcript、Smalltalk 等。例如,类名也是全局变量,这就是为什么你有 Matrix 和 not matrix。对于类实例,您使用带有a 或an 的前缀,就像我使用的aMatrix 是类Matrix 的一个实例。
不同的 Smalltalk 风格之间可能存在细微差别。例如,在 Smalltalk/X 中,类变量以大写字母开头,据我所知,在 GNU Smalltalk 中并非如此。
【讨论】:
我现在有了解决方案,任何人都想知道如何做到这一点。它是
var := Matrix rows: A columns: B. 创建一个矩阵 (A x B),其中 A 和 B 是整数。
【讨论】: