Ruby 多参数
我有一个允许用户连接到HDFS的对象。一种方法允许他们下载数据,另一种方法允许他们上传数据。Ruby 多参数,ruby,Ruby,我有一个允许用户连接到HDFS的对象。一种方法允许他们下载数据,另一种方法允许他们上传数据。initialize方法如下所示: def initialize(file=nil,set=nil,action) end 如何更改参数的传递方式以提高效率?每次都需要操作参数,但仅根据操作需要文件和文件集。也就是说,如果他们想上传数据,他们需要通过set,如果他们想下载数据,他们只需通过文件,首先你应该首先通过所需的参数,例如: def initialize(action, file = nil, s
initialize
方法如下所示:
def initialize(file=nil,set=nil,action)
end
如何更改参数的传递方式以提高效率?每次都需要
操作
参数,但仅根据操作
需要文件
和文件集
。也就是说,如果他们想上传数据,他们需要通过set
,如果他们想下载数据,他们只需通过文件
,首先你应该首先通过所需的参数,例如:
def initialize(action, file = nil, set = nil)
end
然后,您可能希望使用哈希传递可选参数:
def initialize(action, options = {})
end
当需要传递多个可选参数时,传递散列是一种常见的方法。
当您需要传递文件
、设置
或两者同时传递时,您可以按如下方式调用initialize方法(假设此方法在类MyModel
中被防御):
或者当您不想传递任何可选参数时,只需调用:
MyModel.new(action)
在这种情况下,将在
initialize
方法中传递空选项散列 首先,您应该首先通过所需参数,例如:
def initialize(action, file = nil, set = nil)
end
然后,您可能希望使用哈希传递可选参数:
def initialize(action, options = {})
end
当需要传递多个可选参数时,传递散列是一种常见的方法。
当您需要传递文件
、设置
或两者同时传递时,您可以按如下方式调用initialize方法(假设此方法在类MyModel
中被防御):
或者当您不想传递任何可选参数时,只需调用:
MyModel.new(action)
在这种情况下,将在
initialize
方法中传递空选项散列 非常常见的是在位置参数是必需的情况下使用它们,并使用选项散列
其余的。您只需检查操作以验证给定参数是否存在:
def initialize(action, opts={})
if action == 'foo'
raise ArgumentError, "requires either :file or :set" unless
([:file, :set] & opts.keys).size == 1
end
...
end
非常常见的是在位置参数是必需的情况下使用它们,并使用选项散列 其余的。您只需检查操作以验证给定参数是否存在:
def initialize(action, opts={})
if action == 'foo'
raise ArgumentError, "requires either :file or :set" unless
([:file, :set] & opts.keys).size == 1
end
...
end
自Ruby 2.0以来,您可以使用: 所以你可以称之为:
MyClass.new(some_action)
MyClass.new(some_action, set: some_set)
MyClass.new(some_action, file: some_file)
MyClass.new(some_action, set: some_set, file: some_file)
...
自Ruby 2.0以来,您可以使用: 所以你可以称之为:
MyClass.new(some_action)
MyClass.new(some_action, set: some_set)
MyClass.new(some_action, file: some_file)
MyClass.new(some_action, set: some_set, file: some_file)
...
在这种情况下,文件或集合也总是必需的(必须提供其中一个),因此它们不是真正的选项。明白我的意思了吗?@GrahamJackson我添加了一些进一步的解释。在现代Ruby中,必需的参数可以在可选参数之后。现代Ruby已经命名了参数。在这种情况下,文件或集合也总是必需的(必须提供其中一个),因此它们不是真正的选项。明白我的意思了吗?@GrahamJackson我添加了一些进一步的解释。在现代Ruby中,必选参数可以在可选参数之后。现代Ruby有命名参数。这是老式的。这是老式的。