【问题标题】:How to check in Ruby if method's parameter is a symbol?如果方法的参数是符号,如何检查 Ruby?
【发布时间】:2010-12-12 13:59:50
【问题描述】:
def my_method(parameter)
  if <what should be here?>
    puts "parameter is a string"
  elsif <and here?>
    puts "parameter is a symbol"
  end
end

【问题讨论】:

    标签: ruby


    【解决方案1】:

    最简单的形式是:

    def my_method(parameter)
      puts "parameter is a #{parameter.class}"
    end
    

    但如果你真的想根据类型做一些处理,请这样做:

    def my_method(parameter)
      puts "parameter is a #{parameter.class}"
      case parameter
        when Symbol
          # process Symbol logic
        when String
          # process String logic
        else
          # some other class logic
       end
    end
    

    【讨论】:

    • 不应该是case parameter.class吗?
    • @Beerlington 我刚刚测试过,仅使用参数就可以正常工作。
    • @Beerlington: 否:在case x; when y ....; end 中,Ruby 运行y === x 以确定它是否应该进入when 块。 === 只是被定义为做一些“有用的”;例如,对于类,它是instance_of?;对于范围,它是 include? 等。
    • 更多insight 进入case parameter.class 问题。
    【解决方案2】:
    def my_method(parameter)
      if parameter.is_a? String
        puts "parameter is a string"
      elsif parameter.is_a? Symbol
        puts "parameter is a symbol"
      end
    end
    

    应该能解决你的问题

    【讨论】:

      【解决方案3】:
      if parameter.is_a? String
        puts "string"
      elsif parameter.is_a? Symbol
        puts "symbol"
      end
      

      我希望这会有所帮助。

      【讨论】:

        【解决方案4】:
        def my_method(parameter)
          if parameter.is_a? String
            puts "parameter is a string"
          elsif parameter.is_a? Symbol
            puts "parameter is a symbol"
          end
        end
        

        【讨论】:

          【解决方案5】:
          if parameter.respond_to? id2name
                p "Symbol"
          else
               p "not a symbol"
          

          这也可以,但不是一个优雅的解决方案。

          【讨论】:

            猜你喜欢
            • 2012-04-19
            • 2011-12-22
            • 1970-01-01
            • 2011-06-07
            • 1970-01-01
            • 2021-09-30
            • 1970-01-01
            • 1970-01-01
            • 2012-03-24
            相关资源
            最近更新 更多