有没有办法在Ruby中使用整数作为方法名?
发布时间:2020-12-17 03:59:41 所属栏目:百科 来源:网络整理
导读:这是我正在尝试做的一个例子: def 9() run_playback_command(NINE_COMMAND)end 我喜欢这样,因为它应该像以后一样使用: if(channelNumber != nil) splitChannel = "#{channelNumber}".split(//) if(splitChannel[3] != nil) response = "#{splitChannel[3]}
这是我正在尝试做的一个例子:
def 9() run_playback_command(NINE_COMMAND) end 我喜欢这样,因为它应该像以后一样使用: if(channelNumber != nil) splitChannel = "#{channelNumber}".split(//) if(splitChannel[3] != nil) response = "#{splitChannel[3]}"() end if(splitChannel[2] != nil) response = "#{splitChannel[2]}"() end if(splitChannel[1] != nil) response = "#{splitChannel[1]}"() end if(splitChannel[0] != nil) response = "#{splitChannel[0]}"() end end 对不起,如果这是一个简单的问题就麻烦了!我是Ruby的新手. 编辑: 这就是我想让Siri做的事情: if(phrase.match(/(switch to |go to )channel (.+)s (on )?(the )?(directv|direct tv)( dvr| receiver)?/i)) self.plugin_manager.block_rest_of_session_from_server response = nil if(phrase.match(/channel s([0-9]+|zero|one|two|three|four|five|six|seven|eight|nine)/)) channelNumber = $1 if(channelNumber.to_i == 0) channelNumber = map_siri_numbers_to_int(channelNumber) end channelNumber.to_s.each_char{ |c| run_playback_command(COMMAND[c]) } end 难怪它不是在阅读频道.救命? 解决方法
这是你需要的吗?
COMMAND = { "0" => ZERO_COMMAND,"1" => ONE_COMMAND,"2" => TWO_COMMAND,#... "9" => NINE_COMMAND } channelNumber.to_s.each_char{ |c| run_playback_command(COMMAND[c]) } 你甚至不需要检查零?因为nil.to_s是一个空字符串,因此each_char迭代器不会处理任何字符. 顺便说一句,您不能使用标准语法定义(或调用)名称不是合法标识符(您不能以数字开头)的方法,但这在技术上是可行的: class Foo define_method "9" do puts "It's nine!" end end f = Foo.new c = "9" f.send(c) #=> "It's nine!" p (f.methods - Object.methods) #=> [:"9"] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |