我可以在 Ruby 方法中访问隐式 Proc 中定义的方法吗?
Can I access the methods defined in an implicit Proc in a Ruby method?
假设我有以下代码:
def my_test(&fn)
#code goes here
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
问题: 有没有什么方法可以从 my_test
的主体中访问由块定义并传递给它的特定方法 fn
?†
这是我试过的方法。我受到 Struct
通常定义方式的启发:
Person = Struct.new(:name, :age) {
def greet
puts "Person #{name} says hello!"
end
}
mike = Person.new("Mike", 37)
mike.greet
我知道可以通过以下方式使用它来实现类似于我想要的效果,但是非常不优雅。
def my_test(&fn)
ex_struct = Struct.new(:dummy, &fn)
instance = ex_struct.new
puts "The result is: #{instance.my_cool_fn 3, 6}"
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
这将打印预期的 The result is: 9
。然而,这似乎有点 hacky,我想知道是否有更“正确”的方法来实现这个结果。
(† 这个问题,就我的目的而言,纯属假设和娱乐;我没有试图解决更大的问题,只是想更多地了解这种语言。)
Ruby 是一种面向对象的语言。每个方法都需要在某些东西(某个对象)上定义。您需要选择要在何处定义该方法。
您可以在同一对象上定义它 my_test
当前定义 (main
) 只需评估块。
def my_test(&fn)
instance_eval(&fn)
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
my_cool_fn(1,2) #=> 3
或者您可以使用新的 class/module(例如 Struct
)并像您一样在那里定义它。
假设我有以下代码:
def my_test(&fn)
#code goes here
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
问题: 有没有什么方法可以从 my_test
的主体中访问由块定义并传递给它的特定方法 fn
?†
这是我试过的方法。我受到 Struct
通常定义方式的启发:
Person = Struct.new(:name, :age) {
def greet
puts "Person #{name} says hello!"
end
}
mike = Person.new("Mike", 37)
mike.greet
我知道可以通过以下方式使用它来实现类似于我想要的效果,但是非常不优雅。
def my_test(&fn)
ex_struct = Struct.new(:dummy, &fn)
instance = ex_struct.new
puts "The result is: #{instance.my_cool_fn 3, 6}"
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
这将打印预期的 The result is: 9
。然而,这似乎有点 hacky,我想知道是否有更“正确”的方法来实现这个结果。
(† 这个问题,就我的目的而言,纯属假设和娱乐;我没有试图解决更大的问题,只是想更多地了解这种语言。)
Ruby 是一种面向对象的语言。每个方法都需要在某些东西(某个对象)上定义。您需要选择要在何处定义该方法。
您可以在同一对象上定义它 my_test
当前定义 (main
) 只需评估块。
def my_test(&fn)
instance_eval(&fn)
end
my_test {
def my_cool_fn(a, b)
a + b
end
}
my_cool_fn(1,2) #=> 3
或者您可以使用新的 class/module(例如 Struct
)并像您一样在那里定义它。