在 Ruby aws-sdk gem 中,可以为参数传递 nil 值吗?

In Ruby the aws-sdk gem, is it ok to pass a nil value for a parameter?

在Ruby aws-sdk gem中,如果参数不是必需的,可以为参数传递一个nil值吗?

我想做

s3_client.list_objects(bucket: bucket_name,  prefix: path_to_files, marker: marker)

我想知道对于第一个 list_objects 请求,marker 值是否为 nil(与 marker: nil 相同) ).或者如果 marker 为零,我是否必须在没有 marker: marker 的情况下执行 s3_client.list_objects(bucket: bucket_name, prefix: path_to_files)

文档有

:marker (String) — Specifies the key to start with when listing objects in a bucket.

所以我知道 :marker 不是必需的,但正在传递 nil 值支持的行为(毕竟,它不是 String),并且是否保证给出与根本不传递值相同的结果?

查看 aws-sdk-v1 的源代码并搜索 :marker 显示了他们在哪里使用此参数密钥,它似乎受到检查以查看其是否非虚假的保护。所以我认为在这种情况下传入 nil 是安全的。更具体地说,list_objects 方法在 lib/aws/s3/client.rb:

中的定义
# @overload list_objects(options = {})
      #   @param [Hash] options
      #   @option options [required,String] :bucket_name
      #   @option options [String] :delimiter
      #   @option options [String] :marker
      #   @option options [String] :max_keys
      #   @option options [String] :prefix
      #   @return [Core::Response]
      bucket_method(:list_objects, :get, XML::ListObjects) do
        configure_request do |req, options|
          super(req, options)
          params = %w(delimiter marker max_keys prefix)
          params.each do |param|
            if options[param.to_sym]
              req.add_param(param.gsub(/_/, '-'), options[param.to_sym])
            end
          end
        end
      end

注意在添加到请求之前如何检查每个参数的虚假性 if options[param.to_sym]。但是,我没有检查 aws 是否真的需要这个参数。

那就试试吧。没有 :marker 是否有效?如果是这样,并且结果符合预期,那么在那里使用 nil 是安全的。事实上,这与根本不传递它完全一样,因为根据上面的实现,add_param 方法只有在非假时才会被调用。