相关疑难解决方法(0)

如何确定是否在ruby方法中给出了可选参数

我有一个带有可选参数的方法.我如何判断是否给出了论证?

我提出了以下解决方案.我问这个问题,因为我对他们中的任何一个都不满意.还有一个更好的存在吗?

nil 作为默认值

def m(a= nil)
    if a.nil?
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

这个的缺点是,无法确定是否没有参数或nil给出.

自定义NoArgument为默认值

class NoArgument
end

def m(a= NoArgument.new)
    if NoArgument === a
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

是否nil给出了可以决定,但实例存在同样的问题NoArgument.

评估省略号的大小

def m(*a)
    raise ArgumentError if m.size > 1
    if m.size == 1
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

在这个变体中,总是可以决定是否给出了可选参数.但是Proc#arity,此方法的更改从1更改为-1(不是这样,请参阅注释).它的缺点是文档更糟糕,需要手动引发ArgumentError.

ruby optional-parameters

8
推荐指数
1
解决办法
1904
查看次数

如何运行带有警告的所有Ruby脚本?

如何通过修改我的Unix或Windows环境变量来默认打开警告的Ruby脚本?

理想情况下,这应该可以工作,即使我通过Rake间接运行脚本,而不是直接运行它.

基于此答案中的评论.

ruby warnings environment-variables

3
推荐指数
1
解决办法
995
查看次数