用代码包围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的答案是一个更好的解决方案