我是否正确地扩展了这个内置的ruby类?
问题描述:
在我的Rails应用程序中的lib/matrix.rb我已经进入下面的代码扩展内置Matrix类:我是否正确地扩展了这个内置的ruby类?
module Matrix
require 'matrix'
class Matrix
def symmetric?
return false if not square?
(0 ... row_size).each do |i|
(0 .. i).each do |j|
return false if self[i,j] != self[j,i]
end
end
true
end
def cholesky_factor
raise ArgumentError, "must provide symmetric matrix" unless symmetric?
l = Array.new(row_size) {Array.new(row_size, 0)}
(0 ... row_size).each do |k|
(0 ... row_size).each do |i|
if i == k
sum = (0 .. k-1).inject(0.0) {|sum, j| sum + l[k][j] ** 2}
val = Math.sqrt(self[k,k] - sum)
l[k][k] = val
elsif i > k
sum = (0 .. k-1).inject(0.0) {|sum, j| sum + l[i][j] * l[k][j]}
val = (self[k,i] - sum)/l[k][k]
l[i][k] = val
end
end
end
Matrix[*l]
end
end
end
这是Rails应用程序中的方法添加到现有类的正确方法是什么?我应该有需要矩阵线吗?
EDIT 1:提供
附加信息我现在已经除去需要 '矩阵' 线。
如果我输入一个视图页面下面的测试代码,删除我的lib它只能/ matrix.rb文件:
<% require 'matrix' %>
<%
m = Matrix[
[0,0],
[1,1]
]
%>
<%= m.column(0) %>
否则,它给人的错误:
undefined method `[]' for Matrix:Module
当我尝试扩展类时,我似乎消除了构建在Matrix类中的默认方法。有没有解决这个错误的方法?
答
不,你不应该在这里需要'矩阵'。谁使用你的代码(在你的情况下Rails应用程序),应该使用require'矩阵'
答
要在Rails中扩展核心类,只需打开它,添加您的方法并关闭它。例如,延长Matrix
类:
class Matrix
def my_method
"New method"
end
end
你不应该需要require 'matrix'
在你的代码,通过。只要包含扩展名的文件位于其中一个自动加载路径中,您应该可以直接访问新的方法。
如果你需要一个目录添加到您的Rails的自动加载路径,只需使用以下行更新/config/application.rb
:
config.autoload_paths += %W(#{config.root}/app/extras) # Autoload /app/extras/*.rb
好,谢谢,我已经添加了对这个问题的一些附加信息我在上面 – Zakoff 2012-01-30 21:35:13