使用TTY-Prompt的multi_select方法出现预期外行为如何解决?
问题复现
首次尝试使用TTY-Prompt开发终端应用,测试如下代码时,预期用户从列表中选择「Create」选项后会输出「works」,但实际并未触发对应分支逻辑。
require 'tty-prompt' def landing_page prompt = TTY::Prompt.new choices = ["Create", "Update", "Delete", "Quit"] answer = prompt.multi_select("Select", choices) case answer when choices[0] puts "works" else puts "doesn't work" sleep(1) self.landing_page end end landing_page
问题根因
multi_select是TTY-Prompt的多选组件,返回值为包含所有用户选中项的数组,哪怕用户仅选中一个选项,返回值也是包裹该选项的数组结构,例如选中Create时返回["Create"]- 代码中case分支的匹配值是单个字符串
"Create",数组和字符串类型不匹配,因此永远不会进入对应逻辑分支
解决方案
如果业务场景仅需要用户单选一个选项,将代码中的multi_select方法替换为select即可。select是单选组件,返回值为用户选中的单个字符串,和现有分支判断逻辑完全匹配。
内容的提问来源于stack exchange,提问作者Izuchi
相关产品推荐
相关产品推荐

