在 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
方法只有在非假时才会被调用。
在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
方法只有在非假时才会被调用。