我正在学习Ruby.我的背景是C++/Java/C#.总的来说,我喜欢这种语言,但我有点困惑为什么有很多不同的方法来完成同样的事情,每种方法都有自己略有不同的语义.
例如,创建字符串.我可以使用'',",q%,Q%或只是%来创建字符串.某些形式支持插值.其他形式允许我指定字符串分隔符.
为什么有五种方法来创建字符串文字?为什么我会使用非插值字符串?%语法比引用文字有什么优势?
我知道Ruby中的redundency一定有价值,但是我未经训练的眼睛并没有清楚地看到它.请赐教.
我可以按日期列出git stashes
git stash list --date=local
Run Code Online (Sandbox Code Playgroud)
但是如何在没有获取的情况下选择修订版本
fatal: Needed a single revision
Run Code Online (Sandbox Code Playgroud) 我有一个昂贵的(耗时的)外部请求到我需要做的另一个Web服务,我想缓存它.所以我试图通过将以下内容放在应用程序控制器中来使用这个习惯用法:
def get_listings
cache(:get_listings!)
end
def get_listings!
return Hpricot.XML(open(xml_feed))
end
Run Code Online (Sandbox Code Playgroud)
当我get_listings!在我的控制器中调用时,一切都很酷,但是当我调用get_listingsRails时,抱怨没有给出任何阻止.当我查找该方法时,我发现它确实期望一个块,另外看起来该方法仅用于视图?所以我猜测虽然没有说明,但这个例子只是伪代码.
所以我的问题是,如何缓存这样的东西?我尝试了其他各种方法,但无法弄明白.谢谢!
我有一个充满ruby文件的文件夹,当我尝试在另一个文件中使用另一个文件时,require 'file'我得到一个LoadError但是当我使用时,require './file'一切正常.有人可以向我解释为什么会发生这种情况,如果有任何方法我可以在不添加文件的情况下需要./文件吗?
(目录图片):

在红宝石上,include私有的原因是什么,而Object#extend公众呢?
如何在ruby中重新定义类方法?
比方说,例如,我想重新定义方法File.basename("C:\abc.txt")我该怎么做?
这不起作用:
class File
alias_method :old_bn, :basename
def basename(*args)
puts "herro wolrd!"
old_bn(*args)
end
end
Run Code Online (Sandbox Code Playgroud)
我明白了 : undefined method 'basename' for class 'File' (NameError)
顺便说一下,我正在使用 JRuby
我有以下代码,我想用来ping IP地址和写入文件.一切正常,除了我无法写入文件.
server = %w'192.168.150.254
192.168.150.251
192.168.120.1
192.168.120.2'
File.open('/test/test2.out','w') do |s|
server.each do |p|
r = `ping -a -n 1 #{p}`
puts r
end
end
Run Code Online (Sandbox Code Playgroud) 对于数组,当我输入:
puts array[0]
==> text
Run Code Online (Sandbox Code Playgroud)
然而,当我打字
puts array[0].to_s
==> ["text"]
Run Code Online (Sandbox Code Playgroud)
为什么括号和引号?我错过了什么?
ADDENDUM:我的代码看起来像这样
page = open(url) {|f| f.read }
page_array = page.scan(/regex/) #pulls partial urls into an array
partial_url = page_array[0].to_s
full_url = base_url + partial_url #adds each partial url to a consistent base_url
puts full_url
Run Code Online (Sandbox Code Playgroud)
我得到的是:
http://www.stackoverflow/["questions"]
Run Code Online (Sandbox Code Playgroud) 在智能引号和编程语言之间进行类比时,我想到打开和关闭分隔符的不同字符可能不是必需的,而只是可读性的选择.
例如,Ruby的匿名函数中的参数使用相同的管道来打开和关闭.Haskell使用极端偏见的白色空间.
如果不同的我不问类型的分隔符是必要的-为索引括号,括号为块-但无论是独特的打开和关闭括号(如(和))是语法上是必须的大多数语言,或只是设计者的偏好.