Ruby on rails 为什么可以';我是否检索方法的可选参数?
我写了这个简单的方法:Ruby on rails 为什么可以';我是否检索方法的可选参数?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我写了这个简单的方法: def has_kontakt?(*depa) return JSON.parse(self.kontakte).include?(*depa.to_s) end 您可以看到我将depa定义为可选参数。 不知何故,无法使用include?(*depa.to_s)检索参数 以前我有: def has_kontakt?(depa) return JSON.parse(self.kontakte).include?(depa.to_s) end 一切都很
def has_kontakt?(*depa)
return JSON.parse(self.kontakte).include?(*depa.to_s)
end
您可以看到我将depa
定义为可选参数。
不知何故,无法使用include?(*depa.to_s)
检索参数
以前我有:
def has_kontakt?(depa)
return JSON.parse(self.kontakte).include?(depa.to_s)
end
一切都很顺利。我做错了什么?这不是定义可选参数的方式。*是一个splat操作符()。您需要一个可选参数,它看起来更像这样:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
顺便说一句,您不需要指定
return
。Ruby会自动返回最后计算的值。这不是定义可选参数的方式。*是一个splat操作符()。您需要一个可选参数,它看起来更像这样:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
顺便说一句,您不需要指定
return
。Ruby会自动返回最后计算的值。这不是定义可选参数的方式。*是一个splat操作符()。您需要一个可选参数,它看起来更像这样:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
顺便说一句,您不需要指定
return
。Ruby会自动返回最后计算的值。这不是定义可选参数的方式。*是一个splat操作符()。您需要一个可选参数,它看起来更像这样:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
顺便说一句,您不需要指定
return
。Ruby会自动返回最后计算的值。在参数前添加星号不会将其标记为可选。相反,它允许您传递任意数量的参数,然后将这些参数作为数组传递给方法:
def method(*args)
puts args.inspect
end
method :foo
# => [:foo]
method foo, :bar, :baz
# => [:foo, :bar, :baz]
正因为如此,*depa.to\s
并没有真正的用处。我猜,您可能想要通过添加如下默认值来定义可选参数:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
或者您希望正确处理阵列(取决于您实际想要实现的目标)
在参数前添加星号不会将其标记为可选。相反,它允许您传递任意数量的参数,然后将这些参数作为数组传递给方法:
def method(*args)
puts args.inspect
end
method :foo
# => [:foo]
method foo, :bar, :baz
# => [:foo, :bar, :baz]
正因为如此,*depa.to\s
并没有真正的用处。我猜,您可能想要通过添加如下默认值来定义可选参数:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
或者您希望正确处理阵列(取决于您实际想要实现的目标)
在参数前添加星号不会将其标记为可选。相反,它允许您传递任意数量的参数,然后将这些参数作为数组传递给方法:
def method(*args)
puts args.inspect
end
method :foo
# => [:foo]
method foo, :bar, :baz
# => [:foo, :bar, :baz]
正因为如此,*depa.to\s
并没有真正的用处。我猜,您可能想要通过添加如下默认值来定义可选参数:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
或者您希望正确处理阵列(取决于您实际想要实现的目标)
在参数前添加星号不会将其标记为可选。相反,它允许您传递任意数量的参数,然后将这些参数作为数组传递给方法:
def method(*args)
puts args.inspect
end
method :foo
# => [:foo]
method foo, :bar, :baz
# => [:foo, :bar, :baz]
正因为如此,*depa.to\s
并没有真正的用处。我猜,您可能想要通过添加如下默认值来定义可选参数:
def has_kontakt?(depa=nil)
if depa.nil?
# no argument was passed in
else
# depa was specified
end
end
def has_kontakt?(depa="")
return JSON.parse(self.kontakte).include?(depa.to_s)
end
或者您希望正确处理阵列(取决于您实际想要实现的目标)
*depa
不是可选参数。这是一场争论。这是有区别的。你能给我写一个答案吗,我如何定义一个可选的参数?谢谢你,我能正确地阅读并理解这篇文章…:)depa.to_s
可能不是您想要的*depa
。将数组(*depa
)转换为字符串确实会降低include?
找到匹配项的可能性。*depa
不是可选参数。这是一场争论。这是有区别的。你能给我写一个答案吗,我如何定义一个可选的参数?谢谢你,我能正确地阅读并理解这篇文章…:)depa.to_s
可能不是您想要的*depa
。将数组(*depa
)转换为字符串确实会降低include?
找到匹配项的可能性。*depa
不是可选参数。这是一场争论。这是有区别的。你能给我写一个答案吗,我如何定义一个可选的参数?谢谢你,我能正确地阅读并理解这篇文章…:)depa.to_s
可能不是您想要的*depa
。将数组(*depa
)转换为字符串确实会降低include?
找到匹配项的可能性。*depa
不是可选参数。这是一场争论。这是有区别的。你能给我写一个答案吗,我如何定义一个可选的参数?谢谢你,我能正确地阅读并理解这篇文章…:)depa.to_s
可能不是您想要的*depa
。将一个数组(*depa
)转换为一个字符串将真正降低include?
找到匹配项的可能性。