想請問Ruby有沒有簡化這種code邏輯的方法


#1

Sorry 小弟很菜 想問一下基本的問題:

以下是在rails model中的4個instance methods
`
def case1_change_to(variable)
ServiceClass.method( case1, variable)
end

def case2_change_to(variable)
ServiceClass.method( case2, variable)
end

def case3_change_to(variable)
ServiceClass.method( case3, variable)
end

def case4_change_to(variable)
ServiceClass.method( case4, variable)
end
`
好奇在實作上有什麼方法可以簡化之類的,沒辦法放到ServiceClass的class method中,因為其他地方需要用到同要的class method


#2

沒…你的順序錯了

def change_to(number_x , variable)
  ServiceClass.method(number_x, variable)
end

或是

def change_to(number_x , variable)
  case number_x
  when 1
    ServiceClass.method( case1, variable)
  when 2
    ServiceClass.method( case2, variable)
  else
    raise "fail"
  end
end

結束,答案是讓上游多設定一個值即可,當然 Ruby 還有一票非常 evil 的作法,不過基本上我這邊不太推薦使用就是了,類似 dynamic build method 還有單純的用 call block,簡單的東西還是用簡單的方式會好些


#3

喔喔~ 豁然開朗

動態建method指的是利用ruby metaprogramming嗎?


#4

yep~ 不過那邊都太 evil 了,我是很少用就是了