ruby中的方法类似于子例程吗?

ruby中的方法类似于子例程吗?,ruby,Ruby,我以前用Basic和Pascal编写了下面的程序,现在我将它移植到Ruby。第20..26行中的puts代表basic和pascal中对子例程(gosub..return)的调用。我在Ruby中找不到子例程。我会为每一个创建一个方法吗?子例程是图形显示、大脑矩阵操作等。重要的是,当它们完成时,我回到同一地点 (如果有用:外部事件,例如按键,将值放入刺激矩阵,当与大脑矩阵相乘时,将生成行为矩阵中的值。) 也欢迎使用更优雅的方式来完成第20到26行 谢谢 require 'matrix' class

我以前用Basic和Pascal编写了下面的程序,现在我将它移植到Ruby。第20..26行中的puts代表basic和pascal中对子例程(gosub..return)的调用。我在Ruby中找不到子例程。我会为每一个创建一个方法吗?子例程是图形显示、大脑矩阵操作等。重要的是,当它们完成时,我回到同一地点

(如果有用:外部事件,例如按键,将值放入刺激矩阵,当与大脑矩阵相乘时,将生成行为矩阵中的值。) 也欢迎使用更优雅的方式来完成第20到26行

谢谢

require 'matrix'
class Matrix
  def []=(i, j, x)
    @rows[i][j] = x
  end
end #code to allow putting individual elements in matrix at i,j

brain=  Matrix[ [0,0,0,0,99,0,0,0,0,1,0],
            [0,0,0,0,0,99,0,0,0,1,0],
            [0,0,0,0,0,0,99,0,0,1,0],
            [25,0,0,0,0,0,0,1,-1,1,-99],
            [0,23,0,0,0,0,0,1,-1,1,1],
            [0,0,24,0,0,0,0,1,-1,1,1],
            [0,0,0,22,0,0,0,1,-1,1,1] ]
stimulus=Matrix.column_vector([0,0,0,0,0,0,0,0,0,0,0])
behavior=Matrix.column_vector([0,0,0,0,0,0,0])

t=500 # t=threshold
behavior=brain*stimulus
if behavior[0,0] > t then puts "do poistive fixer" end
if behavior[1,0] > t then puts "do negative fixer" end
if behavior[2,0] > t then puts "show UCR" end
if behavior [3,0] > t then puts "show operant 1" end
if behavior[4,0] > t then puts "show operant 2" end
if behavior[5,0] > t then puts "show operant 3" end
if behavior[6,0] > t then puts "show operant 4" end

是的,方法是可重用的代码块,就像子例程一样

20-26中最快的重构如下所示:

puts "do positive fixer" if behavior[0,0] > t
puts "do negative fixed" if behavior[1,0] > t
你是否喜欢最低限度的储蓄是一个意见问题

下一个重构级别可能与将字符串放入数组一样简单(未经测试但接近):

正如Tin Man指出的,您可以直接使用阵列:

do_this.each_with_index { |s, n| puts s if behavior[n, 0] }

等等。

是的,方法是可重用的代码块,就像子程序一样

20-26中最快的重构如下所示:

puts "do positive fixer" if behavior[0,0] > t
puts "do negative fixed" if behavior[1,0] > t
你是否喜欢最低限度的储蓄是一个意见问题

下一个重构级别可能与将字符串放入数组一样简单(未经测试但接近):

正如Tin Man指出的,您可以直接使用阵列:

do_this.each_with_index { |s, n| puts s if behavior[n, 0] }

等等。

方法、子程序、函数。。。一个函数是一个引用透明的子例程。过程是具有副作用的子程序。方法是一个子例程,它有一个可识别的接收者,并有权访问reveiver的内部。。。一个函数是一个引用透明的子例程。过程是具有副作用的子程序。方法是一个子例程,它有一个可分辨的接收器和对接收器内部的特权访问。我将字符串放入一个数组中,然后使用
每个带有索引的\u,但我可能遗漏了一些重要的内容。@theTinMan Sure;这也很好——我的问题是代码本身不是由字符串值驱动的。很可能是六对一。我会把字符串放在一个数组中,然后用
将每个\u与\u索引一起使用
,但我可能遗漏了一些重要的东西。@theTinMan肯定;这也很好——我的问题是代码本身不是由字符串值驱动的。可能是六比一。