Tag: ruby

ruby中各种变量范围之间的差异

Ruby有5个变量范围: 局部变量 :这些是正常变量,例如x = 25 , y = gaurish ,其中x和y是局部变量。 实例变量 :这些用实际变量名称的@符号表示。 主要用于类,以便类的每个实例/对象具有不同/单独的值。 例。 @employee.name = ‘Alex’ 类变量 :在变量名前面用@@符号表示。 类变量,我认为具有相同的值accos所有实例/对象。 全局变量 :它们以$符号开头, 随处可访问。 示例$LOAD_PATH 常量 :必须以大写字母开头,但必须按照ALL_CAPS的惯例ALL_CAPS 。 虽然,它是一个常数,但它的值不是常数,可以改变(虽然ruby会发出警告)。 从某种意义上说,这也像一个变量。 正如您可能注意到的,以上所有都是存储某些类型值的变量,它们的值可以更改。 但是,每个范围都会有所不同。 拥有5种不同类型的可变范围让我感到困惑。 主要是,我很难决定在什么情况下,我应该在我的代码中使用特定的范围。 所以我脑子里有一些问题。 请回答: 我注意到,与实例变量不同,局部变量和类变量对于所有对象/实例保持相同。 那么局部变量和类变量有什么区别? 可以使用局部变量代替类变量吗? 或相反亦然。 如果是,那么为什么,如果没有,那么为什么不呢? ruby中的全局变量让我想起了PHP中邪恶的global $x变量。 ruby中的全局变量也被认为是邪恶的,因此不应该使用。 或者,在特定情况下,在ruby中使用全局变量是有意义的吗? 为什么常量不是常量并允许更改它们的值? 根据定义,常数的值应该是不变的吗? 否则,我们可以使用另一个变量而不改变它的值。 那相当于ruby中的CONSTANT吗? 任何页面/资源/链接解释了ruby中5个不同变量范围之间的区别? 我想保留一个方便参考。 在什么用例下,我应该在我的代码中使用特定的变量作用域。 因此,人们会解释所有5个案例,这些案例很酷,这是我混淆的主要原因。 在java中有像public这样的事实上的选择吗? 在大多数用例中哪个是安全的赌注? 感谢您花时间阅读并回答问题

为什么String#gsub会双重内容?

s = “#main= ‘quotes’ s.gsub “‘”, “\\'” # => “#main= quotes’quotes” 这似乎是错误的,我希望得到”#main= \\’quotes\\'” 当我不使用转义字符时,它按预期工作。 s.gsub “‘”, “*” # => “#main= *quotes*” 所以必须与逃避有关。 使用ruby 1.9.2p290 我需要用反斜杠和引号替换单引号。 更多的不一致: “\\'”.length # => 2 “\\*”.length # => 2 # As expected “‘”.gsub(“‘”, “\\*”).length # => 2 “‘a'”.gsub(“‘”, “\\*”) # => “\\*a\\*” (length==5) # WTF next: “‘”.gsub(“‘”, “\\'”).length # => […]

在初始化程序中设置cache_store

我正在尝试使用redis-store作为我的Rails 3 cache_store。 我还有一个初始化器/ app_config.rb,它为配置设置加载一个yaml文件。 在我的初始化程序/ redis.rb中,我有: MyApp::Application.config.cache_store = :redis_store, APP_CONFIG[‘redis’] 但是,这似乎不起作用。 如果我做: Rails.cache 在我的rails控制台中,我可以清楚地看到它正在使用 ActiveSupport.Cache.FileStore 作为缓存存储而不是redis-store。 但是,如果我在application.rb文件中添加配置,如下所示: config.cache_store = :redis_store 它运行得很好,除了在app.rb之后加载app config初始化程序,所以我没有访问APP_CONFIG。 有没有人经历过这个? 我似乎无法在初始化程序中设置缓存存储。

如何跳过CSV文件的第一行并将第二行作为标题

有没有办法跳过CSV文件的第一行并使第二行充当标题? 我有一个CSV文件,第一行有日期,第二行有标题,所以我需要能够在迭代时跳过第一行。 我尝试使用slice但将CSV转换为数组,我真的想将其读作CSV,以便我可以利用标头。

使用Rails3和Ruby 1.9.2运行Mongrel的LoadError

我是编程(以前只做html / css / design)的新手,试图通过Simply Rails 2开始学习RoR。但是我想从最新版本的Ruby(1.9.2)和Rails(3)开始我被迫在没有这本书的情况下完成所有配置。 我通过谷歌和stackoverflow看了很多。 当我运行rails server它自动使用Webrick,但我想使用Mongrel。 我通过gem install mongrel –pre安装了预发布的Mongrel并删除了以前的版本。 我读到为了让Mongrel与rails server一起工作,我不得不在Gemfile中添加gem’mongrel gem ‘mongrel’ ,但我不知道应该将它添加到哪一个(我尝试了几个但没有改变)。 所以我决定通过git查看mongrel文档并了解mongrel_rails start在我运行时mongrel_rails start我得到了这个: C:\Ruby192\shovell>mongrel_rails start ** Starting Mongrel listening at 0.0.0.0:3000 ** Starting Rails with development environment… C:/Ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.0.rc.6/lib/bundler/runtime.rb:27:in ‘block in setup’: You have already activated mongrel 1.2. 0.pre2, but your Gemfile requires mongrel 1.1.5. Consider using […]

什么是|| =是什么意思?

我的应用程序控制器中有一个受保护的方法 def current_user @current_user ||= User.find_by_id(session[:user_id]) end 我想知道||=是什么意思? 我一直在努力寻找并找出答案,但无济于事。

带有可选参数的方法

有没有办法制作一个可以接受参数的方法,但也可以在没有参数的情况下调用,在这种情况下,参数被认为是如下所示? some_func(variable) some_func

‘在rbuf_fill中救援’:超时::错误(超时::错误)

相同的脚本不同错误。 这可能与我的网络而不是我的代码有关。 脚本如下: #!/usr/bin/env ruby -rubygems require File.join(File.dirname(__FILE__), ‘authentication’) require “csv” # faster_csv (ruby 1.9) lines = CSV.read(File.join(File.dirname(__FILE__), ‘karaoke.csv’)) # Exported an Excel file as CSV lines.slice!(0) # remove header line collection = StorageRoom::Collection.find(‘collection ID’) Song = collection.entry_class lines.each do |row| karaoke = Song.new(:artist => row[0], :song => row[1], :genre => row[2], :file => StorageRoom::File.new_with_filename(“#{karaoke.artist}#{karaoke.song}.mov”)) […]

使用Web套接字进行点对点文件共享

这是一个理论问题,但是,我需要为我的基于Web套接字的聊天应用程序添加文件共享function。 我可以使用像Amazon S3这样的服务通过发布文件的链接来上传要共享的文件,但这涉及上传可能已经可以通过本地网络访问的文件(例如,在同事之间共享文件) 。 所以我认为有可能通过现有的Web套接字连接以某种方式隧道上传/下载/传输。 但是,我对HTTP文件传输知之甚少,不知道如何实现它的下一步。 Web套接字是否存在限制,以防止这种情况发生? 我正在使用Ruby和EventMachine来实现我当前的Web套接字。 如果您能够提供高水平的概述以帮助我入门,那将非常感激。

Ruby win32 api接口

我需要在ruby中访问win32库的一些函数。 我在网上找到了关于Win32API类的非常稀少的信息,所以我在这里问。 我知道你可以这样做: function = Win32API.new(‘user32′,’MessageBox’,[‘L’, ‘P’, ‘P’, ‘L’],’I’) 但我似乎无法使用当前的win32绑定调用此函数: http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx 问题在于它的原型: UINT_PTR SHAppBarMessage( DWORD dwMessage, PAPPBARDATA pData ); 我将能够使用win32 ruby​​绑定来获取返回类型和第一个参数,但是,第二个参数需要一个结构。 结构的定义如下: typedef struct _AppBarData { DWORD cbSize; HWND hWnd; UINT uCallbackMessage; UINT uEdge; RECT rc; LPARAM lParam; } APPBARDATA, *PAPPBARDATA; 我尝试使用两者来定义这个api方法: api = Win32API.new(‘shell32′,’SHAppBarMessage’,[‘L’, ‘L’, ‘L’, ‘L’, ‘L’, ‘L’, ‘L’, ‘L’, ‘L’],’I’) 和 api […]