在 ruby 中使用调用方法作为参数
Use calling method as parameter in ruby
抱歉,如果它不是那么富有表现力,但我真的不知道如何给这个问题命名。事情是这样的:
我必须运行这个测试:
Aspects.where has_parameters(3, 'optional')
我有这个方法:
def self.has_parameters(amount, status = 'everything')
if status == 'mandatory'
***.parameters.select do |param| param.first == :req end.size == amount
elsif status == 'optional'
***.parameters.select do |param| param.first == :opt end.size == amount
elsif status == 'everything'
***.parameters.size == amount
end
end
Aspects 是具有两种方法(where 和 has_parameters)的 class
还有一个 "where" 方法可以假装 returns 一个方法 (:symbol)
问题在于用 "where" returns 我们的方法替换 ***。
所以它会是这样的:
Aspects.where 将离开我们,例如 :singleton_method.. 我需要以某种方式让 has_parameters 知道 :singleton_method 是 ***
谢谢!!!有问题就问!!
假设你想构建一个流畅的调用链(我放弃理解块 do |param| ...
)你可以将 where
返回的最后一个值存储在 class 字段中@@current_method
class Aspects
@@current_method
def self.where(p)
@@current_method = p.blah()
end
def self.has_parameters(amount, status = 'everything')
if status == 'mandatory'
@@current_method.parameters {|p| ... }
end
end
抱歉,如果它不是那么富有表现力,但我真的不知道如何给这个问题命名。事情是这样的:
我必须运行这个测试:
Aspects.where has_parameters(3, 'optional')
我有这个方法:
def self.has_parameters(amount, status = 'everything')
if status == 'mandatory'
***.parameters.select do |param| param.first == :req end.size == amount
elsif status == 'optional'
***.parameters.select do |param| param.first == :opt end.size == amount
elsif status == 'everything'
***.parameters.size == amount
end
end
Aspects 是具有两种方法(where 和 has_parameters)的 class
还有一个 "where" 方法可以假装 returns 一个方法 (:symbol)
问题在于用 "where" returns 我们的方法替换 ***。
所以它会是这样的: Aspects.where 将离开我们,例如 :singleton_method.. 我需要以某种方式让 has_parameters 知道 :singleton_method 是 ***
谢谢!!!有问题就问!!
假设你想构建一个流畅的调用链(我放弃理解块 do |param| ...
)你可以将 where
返回的最后一个值存储在 class 字段中@@current_method
class Aspects
@@current_method
def self.where(p)
@@current_method = p.blah()
end
def self.has_parameters(amount, status = 'everything')
if status == 'mandatory'
@@current_method.parameters {|p| ... }
end
end