gpt4 book ai didi

ruby - 如何为对象调用自定义方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:34 26 4
gpt4 key购买 nike

我有一个包含多个方法的类:

class Test
def initialize (age, height)
@age = age
@height = height
end

def older
@age = @age + 2
end

def shorter
@height = @height - 5
end
end

man = Test.new(40, 170)
man.older
man.shorter

[...]

我想传递给对象 man 一个自定义方法,也就是说,我想写类似 man.variablemethod 的东西并设置 .variablemethod.older.shorter,具体取决于其他一些因素。我该怎么做?

我发现我可以调用“if condition then man.older”,但我不想使用if,尤其是当我有二十种不同的方法来从中选择。

最佳答案

听起来你需要 send :

man.send(method_name)

您可以传递代表您希望调用的方法名称的字符串或符号,甚至还可以传递其他参数:

def man.older_by_increment(years)
@age += years
end

man.send(:older_by_increment, 7)

这还允许您从任何地方调用私有(private)和 protected 方法:

class Man

# ...

private

def weight
@weight
end
end

Man.new.weight # => private method `weight' called for #<Man:0x10bc956d8> (NoMethodError)
Man.new.send(:weight) # => @weight

关于ruby - 如何为对象调用自定义方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9294795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com