Ruby 尝试创建一个从同一类中选择随机方法的方法
也许这是个愚蠢的想法。。。我是Ruby新手(也是OOP新手,所以大部分时间我都不知道自己在做什么),我想到了一个小而有趣的项目来构建,我正在为一些概念而挣扎 我正在构建的基本上是一个字符串操纵器。我正在用额外的方法构建一个模块,然后将其包含在String类中 我的模块有几种方法,它们以不同的方式处理字符串,主要是替换单词,然后返回修改后的字符串 为了使字符串操作更加“自发”和自然,我想做的是创建一个“main”方法(我将从字符串中调用该方法),该方法随机选择一个字符串操作方法,然后返回字符串(然后可以再次调用以一次应用多个操作) 我怎样才能做到这一点,或类似的事情?希望我能解释清楚 谢谢Ruby 尝试创建一个从同一类中选择随机方法的方法,ruby,oop,methods,Ruby,Oop,Methods,也许这是个愚蠢的想法。。。我是Ruby新手(也是OOP新手,所以大部分时间我都不知道自己在做什么),我想到了一个小而有趣的项目来构建,我正在为一些概念而挣扎 我正在构建的基本上是一个字符串操纵器。我正在用额外的方法构建一个模块,然后将其包含在String类中 我的模块有几种方法,它们以不同的方式处理字符串,主要是替换单词,然后返回修改后的字符串 为了使字符串操作更加“自发”和自然,我想做的是创建一个“main”方法(我将从字符串中调用该方法),该方法随机选择一个字符串操作方法,然后返回字符串(然
O.这是您描述的随机操作模块<代码>随机的东西是主要的方法: 将其混合到
字符串中
:
class String
include RandomStringManipulation
end
现在我们可以创建一个空字符串,然后对它执行几次随机操作,每次都将其打印出来:
s = ""
4.times do
s = s.something_random
p s
end
# => "foo"
# => "foobar"
# => "foobarbar"
# => "foobarbarfoo"
有两个方面很有趣。第一个是:
methods -= [:something_random]
send methods.sample
从数组方法中删除:something\u random
,防止*something\u random*方法调用自身。第二个有趣的地方是:
methods -= [:something_random]
send methods.sample
Array.sample
(Ruby>=1.9)选择一个随机方法<代码>发送
然后发送该方法。在Ruby 1.8中,改为执行以下操作:
send methods[rand(methods.size)]
如果所有将使用您的功能的代码都是您的代码,我将创建一个新类,而不是猴子修补字符串。猴子补丁导致代码更难理解和共享 无论如何,给定一个mutator方法列表,您可以轻松地随机选择一个并使用Object#send调用它:
module StringMutator
def fold() ... end
def spindle() ... end
def mutilate() ... end
end
class NiftyString
include StringMutator
def random_change()
im = StringMutator.instance_methods
self.send im[rand im.length]
end
end
谢谢,韦恩,这很有用。你的回答对我很有用,但我不得不接受这两个答案中的一个,马克的答案更容易理解,但你的答案让我学到了一些新东西。谢谢你才意识到,另一个代码不起作用,我不得不使用你的代码,所以我更改了接受的代码answer@0al0,我很高兴它对你有用。马克·里德(MarkReed)的回答中有一部分比我刚才写的任何东西都要好:他告诫你们要提防猴子修补绳子。这是个好建议。这里有陷阱:想象一下,一些宝石也在修补绳子。当你的猴子补丁和别人的冲突时,你会希望自己永远不会出生。这可能是一个真正的痛苦。我知道,我读过,但这是一个非常小的项目,我做的乐趣,不打算重复使用它或任何东西,所以它不应该是一个问题