首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据在Ruby中收到的命令调用函数

根据在Ruby中收到的命令调用函数
EN

Stack Overflow用户
提问于 2019-07-26 14:46:29
回答 1查看 62关注 0票数 1

给定一个文本命令,我需要确定需要调用项目中的哪个类和方法。例如,/help应该触发Generic.new.help/edit应该分别触发user.edit函数。

我做的就是这个巨大的开关案例树,它完成了这项工作。看起来有点像,

代码语言:javascript
运行
复制
case command
when '/help'
  Generic.new.help
when '/edit'
  user.edit
when /^\/action_[a-z]+$/
  user.action(command)
end

这是可行的,但我想知道是否有更好的解决方案。

在整个场景中唯一的额外问题是基于正则表达式的命令,例如,如果命令是/action_a/action_b,它应该调用相同的user.action方法

EN

Stack Overflow用户

发布于 2019-07-26 16:00:07

在某些user对象上调用不同的方法可能如下所示

代码语言:javascript
运行
复制
user_methods = %w(show edit create update)
case
when user_methods.include?(command[1..-1])
  user.send(command[1..-1])
end

第一行以字符串形式形成有效user方法的数组。command[1..-1]表达式从command中删除第一个字符(/)。如果数组中存在commanduserssend方法将对此对象调用命令。

至于正则表达式,您可以

代码语言:javascript
运行
复制
case command
when /^\/someaction_[a-z]+$/, /^\/anotheraction_[a-z]+$/
  real_cmd = command.split('_').first
  user.send(real_cmd[1..-1], command)
end

用下划线符号拆分命令会得到实际的操作名称,您可以像上面那样使用send命令。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57214506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档