Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用代码包围Ruby方法_Ruby_Refactoring - Fatal编程技术网

用代码包围Ruby方法

用代码包围Ruby方法,ruby,refactoring,Ruby,Refactoring,我有很多这样的方法: def enableMotors @posIface.Lock 1 @posIface.data.cmdEnableMotors = 1 @posIface.Unlock end def goTo (pos) @posIface.Lock 1 @posIface.data.cmdVelocity.pos = pos @posIface.Unlock end 我想创建以下功能:before\u filter和:after\u filter或任何其他

我有很多这样的方法:

def enableMotors
  @posIface.Lock 1
  @posIface.data.cmdEnableMotors = 1
  @posIface.Unlock
end

def goTo (pos)
  @posIface.Lock 1
  @posIface.data.cmdVelocity.pos = pos
  @posIface.Unlock
end
我想创建以下功能:before\u filter和:after\u filter或任何其他方式,以尽可能保持代码干燥。
我不想仅仅为了这个而依赖铁轨或其他沉重的东西

您真的需要一个完整的:前:后回调系统,还是这对您来说就足够了

def with_lock(&block)
  @posIface.Lock 1
  yield
  @posIface.Unlock
end

def enableMotors
  with_lock { @posIface.data.cmdEnableMotors = 1 }
end

def goTo (pos)
  with_lock { @posIface.data.cmdVelocity.pos = pos }
end

你真的需要一个完整的:前:后回调系统吗?或者这对你来说足够了吗

def with_lock(&block)
  @posIface.Lock 1
  yield
  @posIface.Unlock
end

def enableMotors
  with_lock { @posIface.data.cmdEnableMotors = 1 }
end

def goTo (pos)
  with_lock { @posIface.data.cmdVelocity.pos = pos }
end
要进一步扩展,利用
产生
和代码块看起来是必要的。由于两个块中都使用了
@posIface.data
,因此可以执行以下操作以进一步干燥:

def with_lock(&block)
  @posIface.Lock 1
  yield @posIface.data
  @posIface.Unlock
end

def enableMotors
  with_lock { |obj| obj.cmdEnableMotors = 1 }
end

def goTo (pos)
  with_lock { |obj| obj.cmdVelocity.pos = pos }
end
要进一步扩展,利用
产生
和代码块看起来是必要的。由于两个块中都使用了
@posIface.data
,因此可以执行以下操作以进一步干燥:

def with_lock(&block)
  @posIface.Lock 1
  yield @posIface.data
  @posIface.Unlock
end

def enableMotors
  with_lock { |obj| obj.cmdEnableMotors = 1 }
end

def goTo (pos)
  with_lock { |obj| obj.cmdVelocity.pos = pos }
end
我想这样就行了(我不太清楚到底是怎么回事)

不过,weppos的答案是一个更好的解决方案

我想这样就行了(我不太清楚到底是怎么回事)

不过,weppos的答案是一个更好的解决方案