每当我交换数组中的值时,我都会确保将其中一个值存储在引用变量中。但是我发现Ruby可以返回两个值,也可以自动交换两个值。例如,array=[1,3,5,6,7]array[0],array[1]=array[1],array[0]#=>[3,1]我想知道Ruby是如何做到这一点的。 最佳答案 与其他语言不同,Ruby中任何方法调用的返回值始终是一个对象。这是可能的,因为就像Ruby中的所有内容一样,nil本身就是一个对象。您将看到三种基本模式。不返回特定值:defnothingendnothing#=>nil返回一个奇异值:defs
我经常需要检查某些值是否为空,然后像这样写“没有数据”:@user.address.blank??"Wedon'tknowuser'saddress":@user.address当我们有大约20-30个字段需要以这种方式处理时,它就变得丑陋了。我所做的是使用或方法扩展String类classStringdefor(what)self.strip.blank??what:selfendend@user.address.or("Wedon'tknowuser'saddress")现在看起来好多了。但它仍然是原始和粗糙的如何更好地解决我的问题。也许扩展ActiveSupport类或使用辅助方
我需要有多个提交按钮。我有一个创建Contact_Call实例的表单。一个按钮创建它正常。另一个按钮创建它但需要有一个不同于默认值的:attribute值,并且它还需要在Controller中使用的不同但相关的模型上设置属性。我该怎么做?我无法更改路由,那么有没有办法发送一个由[:params]获取的不同变量?如果我这样做了,我应该在Controller中做什么,设置一个case语句? 最佳答案 您可以创建多个提交按钮并为每个按钮提供不同的值:....这将输出:在您的Controller中,提交按钮的值将由参数commit标识。检查
我正在寻找一种在Ruby中对字符串执行正则表达式匹配并使其在第一个匹配项时短路的方法。我正在处理的字符串很长,从标准方式(match方法)来看,它会处理整个字符串,收集每个匹配项,并返回一个包含所有匹配项的MatchData对象。match=string.match(/regex/)[0].to_s 最佳答案 你可以试试String#[](如variableName[/regularexpression/])。这是IRB的示例输出:names="erikkallejohananderserikkallejohananders"#=>
我想将文件存储为/a/b/c/d.txt,但我不知道这些目录是否存在,如果需要需要递归创建它们。如何在ruby中做到这一点? 最佳答案 使用mkdir_p:FileUtils.mkdir_p'/a/b/c'_p是父/路径的unix保留,您也可以使用别名mkpath如果这对您更有意义。FileUtils.mkpath'/a/b/c'在Ruby1.9中,FileUtils已从核心中删除,因此您必须要求“fileutils”。 关于ruby-如何在ruby中递归创建目录?,我们在Stack
在构建虚假种子数据时,我一直在使用它来返回true或false。只是想知道是否有人有更好、更简洁或更详细的方法来返回true或false。rand(2)==1?true:false 最佳答案 使用Array#sample的声明性片段:random_boolean=[true,false].sample 关于ruby-返回随机bool值的最佳方式,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques
我知道有其他语言的库可以接受包含本地文件路径或url的字符串,并将其作为可读IO流打开。在ruby中有没有简单的方法来做到这一点? 最佳答案 open-uri是标准Ruby库的一部分,它将重新定义open的行为,以便您可以打开url以及本地文件。它返回一个File对象,因此您应该能够调用read和readlines等方法。require'open-uri'file_contents=open('local-file.txt'){|f|f.read}web_contents=open('http://www.stackoverfl
是否有可能从方法返回多个值?像这样:defsomeMethod()return["a",10,SomeObject.new]end[a,b,c]=someMethod 最佳答案 defsumdiff(x,y)returnx+y,x-yend#=>nilsumdiff(3,4)#=>[7,-1]a=sumdiff(3,4)#=>[7,-1]a#=>[7,-1]a,b=sumdiff(3,4)#=>[7,-1]a#=>7b#=>-1a,b,c=sumdiff(3,4)#=>[7,-1]a#=>7b#=>-1c#=>nil
如果您尝试以元编程方式创建类方法,这将很有用:defself.create_methods(method_name)#Tocreateinstancemethods:define_methodmethod_namedo...end#Tocreateclassmethodsthatrefertotheargsoncreate_methods:???end我要遵循的答案... 最佳答案 我认为在Ruby1.9中你可以这样做:classAdefine_singleton_method:loudlydo|message|putsmessag
我有一个类的名称,我想创建该类的一个实例,以便我可以遍历该类架构中存在的每个rails属性。我该怎么做呢?我有名称作为我要检查的类的字符串我想我需要实例化一个类实例,这样我就可以遍历它的属性并打印它们。 最佳答案 在Rails中你可以这样做:clazz='ExampleClass'.constantize在纯ruby中:clazz=Object.const_get('ExampleClass')带有模块:moduleFooclassBarendend你会用>clazz='Foo::Bar'.split('::').inject(Ob