我有一个类似这样的课程:
class House
def bricks
Brick.for(@house_plan).where(size: 5)
end
def wood
Wood.for(@house_plan).where(size: 5)
end
end
我的目标是摘录电话 for(self).where(size: 5)
:
我首先尝试的是:
class House
def bricks
Brick.match_material
end
def wood
Wood.match_material
end
def match_material
for(@house_plan).where(size: 5)
end
end
但后来我收到了这个错误:
syntax error, unexpected '\n', expecting :: or '[' or '.'
然后我将代码更改为:
def match_material
.for(@house_plan).where(size: 5)
end
现在我做的时候:
house = House.new(HousePlan.new)
house.bricks
我收到此错误:
formal argument cannot be an instance variable
在这一行:for(@house_plan).where(size: 5)
答案 0 :(得分:6)
您的方法不对,请记住match_material
方法将始终在您自己的上下文中调用。我会这样做:
def bricks
match_material(Brick)
end
def wood
match_material(Wood)
end
def match_material(klass)
klass.for(@house_plan).where(size: 5)
end
答案 1 :(得分:0)
出于好奇:
def bricks
klazz = Kernel.const_get(__callee__[0...-1].capitalize)
klazz.for(@house_plan).where(size: 5)
end
alias :woods :bricks
注意:在这种方法中,别名方法应始终如一地命名(bricks
,woods
。)除非您了解自己在做什么,否则请不要在生产中使用它。