【问题标题】:Using Ruby 1.9.2 with RubyMine and Matrix将 Ruby 1.9.2 与 RubyMine 和 Matrix 一起使用
【发布时间】:2011-08-27 11:54:29
【问题描述】:

我正在使用 ruby​​ 1.9.2-p290 和 RubyMine。我尝试使用矩阵(需要'矩阵')。所以,我有几个问题。

  • 如何更改矩阵的任何值?

例如:

require 'matrix'
matrix =  Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]
matrix[0, 0] = 5
p matrix

给出下一个:

in `<top (required)>': private method `[]=' called for Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]:Matrix (NoMethodError)
from -e:1:in `load'
from -e:1:in `<main>'
  • 是否可以在 RubyMine IDE 中通过代码完成向我展示矩阵方法?
  • 我应该为矩阵使用什么库?矩阵?数学?还有什么?

【问题讨论】:

    标签: ruby matrix ruby-1.9.2 rubymine


    【解决方案1】:

    广告 1) 我知道文档说 []= 是一个公共实例方法,1.9.2 中的现实似乎与此不符:

    matrix.private_methods.grep(/\[\]/) #=> [:[]=]
    

    我看到了两种解决方法。第一种是使用send绕过private

    matrix.send(:[]=, 0, 0, 5) #=> 5
    

    第二个是遍历数组:

    m = *matrix
    m[0][0] = 5
    matrix = Matrix[*m]
    

    如果你真的想,你可以改变方法的可见性:

    matrix.class.class_eval { public :[]= }
    

    请注意,我不鼓励任何这些,类的实现方式强烈暗示作者认为矩阵是不可变对象。

    广告 2) 不幸的是,我不知道 RubyMine,但可以在 here 找到 Matrix 类的文档。

    Ad 3) 我还没有在 Ruby 中广泛使用矩阵,但是对于我需要的矩阵,Matrix 类已经足够好了。

    【讨论】:

    • 文档在哪里说[]= 是公开的?
    • 它在“公共实例方法”部分列出。
    • 啊,确实。似乎是 rdoc 的错误。不知道我什么时候有时间调查......
    【解决方案2】:

    只是想补充迈克尔的回答:

    1) Matrix 库的设计使得矩阵是不可变的,就像您不能设置复数的实部一样。

    我是图书馆的维护者(但不是原作者)。不过,我承认如果它们是可变的,它可能会很有用。为 Ruby 1.9.3 更改它为时已晚,但我希望检查使它们可变的后果。

    3) 另一种可能性是检查NArray 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2012-02-21
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多