我正在尝试收集一堆做相同事情的lambda,并通过将其分解为一种方法来使其干燥。有问题的代码在模块/类中,我忘记了正确的方法:/
文档使用lambda显示了这样的示例-
module Mutations
class MyMutation < BaseMutation
argument :name, String, required: true, prepare: -> (value, ctx) { value.strip! }
end
end
我已经尝试过-
module Mutations
class MyMutation < BaseMutation
argument :name, String, required: true, prepare: :no_whitespace
def no_whitespace(value)
value.strip!
end
end
end
但是得到在类错误中找不到的方法。
我还尝试将其移至其自己的模块或类-
module Mutations
class MyMutation < BaseMutation
argument :name, String, required: true, prepare: Testing::no_whitespace
end
class Testing
def no_whitespace(value)
value.strip!
end
end
end
我知道这很愚蠢,但是我找不到合适的组合来使它正常工作,而且我的大脑已经忘记了太多的Ruby,无法记住要谷歌搜索的内容。
答案 0 :(得分:1)
您可以尝试将no_whitespace
定义为模块方法,例如
class Testing
# since the example shows 2 arguments you need to be able
# to accept both even if you only use 1
def self.no_whitespace(value,*_)
value.strip!
end
end
然后使用
class MyMutation < BaseMutation
argument :name, String, required: true, prepare: Testing.method(:no_whitespace)
end
Testing.method(:no_whitespace)
将返回一个Method
,在大多数情况下,该行为非常像lambda。
但是
module Mutations
class MyMutation < BaseMutation
argument :name, String, required: true, prepare: :no_whitespace
def no_whitespace(value)
value.strip!
end
end
end
返回一个NoMethodError: undefined method no_whitespace' for MyMutation:Class
,然后尝试将其定义为类实例方法,然后看看会发生什么:
def self.no_whitespace(value)
value.strip!
end