Ruby Matrix set_element是私有的吗?

Ram*_*Ram 5 ruby matrix access-specifier ruby-1.9.2

当调用set_elementMatrix类的实例时,我收到以下错误

NoMethodError: private method ‘set_element’ called for Matrix[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]:Matrix
Run Code Online (Sandbox Code Playgroud)

但是set_element在文档中的公共实例方法下列出

矩阵#set_element

另外,set_element是[] =(i,j,v)的别名,使用此方法我得到以下错误

ArgumentError: wrong number of arguments (3 for 2)
Run Code Online (Sandbox Code Playgroud)

没有任何意义,任何帮助表示赞赏.

Ruby 1.9.2 p180

the*_*ria 6

您可以简单地将setter函数设置为public,可能在您自己的类中(或在Matrix本身):

class SetableMatrix < Matrix
  public :"[]=", :set_element, :set_component
end
Run Code Online (Sandbox Code Playgroud)


mu *_*ort 1

该文档不正确。如果您查看matrix.rb1.9.1 中的文件,您将看到以下内容:

def []=(i, j, v)
  @rows[i][j] = v
end
alias set_element []=
alias set_component []=
private :[]=, :set_element, :set_component
Run Code Online (Sandbox Code Playgroud)

所以这三个方法是存在的,但它们被显式设置为私有。

一些快速实验表明文档中的许多方法实际上是私有的。手册页顶部有一大块文档,列出了显然应该是可用的方法;该列表与 rdoc 生成的列表不匹配,因此存在一些混乱。

我的印象是 Matrix 的实例应该是不可变的,就像 Fixnum 和 Number 一样。