加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有办法在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"]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读