ruby-on-rails - 如何访问 Ruby splat 参数?

标签 ruby-on-rails arrays ruby devise splat

我已经覆盖了我的设计 gem 中的 send_devise_notification 方法。

我需要访问 *args 数组中的第一个元素,我认为这可以通过 *args[0] 实现。

我期待一个字符串,但请查看下面的奇怪输出:

class User
  include Mongoid::Document

  devise :confirmable, :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :lockable

  protected

    def send_devise_notification(notification, *args)
      p *args.inspect               # => ["auNsGzsnpoQWtAk2Z1Tr", {}]
      p *args[0].inspect            # => "auNsGzsnpoQWtAk2Z1Tr"
      p *args[0].class.to_s.inspect # => "String"
      token = *args[0]
      p token.inspect               # => ["auNsGzsnpoQWtAk2Z1Tr"]
      p token.class.to_s.inspect    # => "Array"
    end
end

当我记录它时,我看到一个字符串。但是当我将它放入 token 变量时,我看到了一个数组。而且我无法将变量转换为字符串。我试过token.to_s

知道发生了什么吗?

最佳答案

你应该使用 args 并且它是一个数组:

def a(*args)
   args.each {|e| puts "-- #{e}" }
end  

a(1,2,3,4)
#-- 1
#-- 2
#-- 3
#-- 4
#=> [1, 2, 3, 4]

因此,如果您想获取它的第一个元素 - 调用 args[0]args.first(不带前导星号)。

关于ruby-on-rails - 如何访问 Ruby splat 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57706598/

相关文章:

ruby-on-rails - Rails 5.1 - 允许使用 JSON 参数,但在日志中仍显示为未经允许

php - PHP 中哪个更快,$array[] = $value 还是 array_push($array, $value)?

Java 从另一个类的数组列表中调用详细信息

ruby - 在 Ruby 中编写单例模式的正确方法是什么?

ruby-on-rails - Ruby 中是否有一种方法可以根据逻辑条件将一个数组分成两个较小的数组?

ruby-on-rails - 实现排行榜

ruby-on-rails - Carrierwave 将 Content-Type 设置为 Octet-Stream

mysql - Rails 4.2 确保数据库和实例中两列的唯一性

c - 将函数中声明的局部数组传递给另一个函数

ruby-on-rails - 在运行时查找 ActiveRecord 类的关联?