我有一节课:
class TestClass
def method1
end
def method2
end
def method3
end
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能在这个类的我的方法列表(method1
,method2
,method3
)?
当我包含我制作的宝石时,感谢Bundler(版本1.0.12),在Gemfile中,然后我尝试捆绑或耙就像:
$ rake
我有这个错误信息:
Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"
Run Code Online (Sandbox Code Playgroud)
我在最后一台Mac OS X(10.6.4)上,有:
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.4.0]
Run Code Online (Sandbox Code Playgroud)
和:
$ gem -v
Invalid gemspec in [/Users/zagzag/.rvm/gems/ruby-1.9.2-p180@foobar/specifications/myplugin-1.0.0.gemspec]: invalid date format in specification: "2011-04-21 00:00:00.000000000Z"
1.7.2
Run Code Online (Sandbox Code Playgroud)
我真的不知道如何解决这个问题.谢谢你的任何想法.
在Ruby中对类变量执行写入/读取不是线程安全的.对实例变量执行写入/读取似乎是线程安全的.也就是说,对类或元类对象的实例变量执行写/读是否是线程安全的?
在线程安全方面,这三个(人为的)示例之间有什么区别?
例1: 相互排斥
class BestUser # (singleton class)
@@instance_lock = Mutex.new
# Memoize instance
def self.instance
@@instance_lock.synchronize do
@@instance ||= best
end
end
end
Run Code Online (Sandbox Code Playgroud)
例2: 实例变量存储
class BestUser # (singleton class)
# Memoize instance
def self.instance
@instance ||= best
end
end
Run Code Online (Sandbox Code Playgroud)
例3: 在METACLASS上安装可变存储器
class BestUser # (singleton class)
# Memoize instance
class << self
def instance
@instance ||= best
end
end
end
Run Code Online (Sandbox Code Playgroud) ruby multithreading metaprogramming thread-safety ruby-1.9.2
Ubuntu 11.
我做以下事情:
$ rvm --default use 1.9.2
我得到:
Using /home/md/.rvm/gems/ruby-1.9.2-p180
这样很好.
但是当我现在打开一个新的终端窗口时,我仍然得到:
$ ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-linux]
我在Ruby中导入文件时遇到了麻烦.我在Windows XP中制作一个Ruby应用程序.该应用程序的所有类文件都在"C:/Documents/Prgm/Surveyor_Ruby/lib"
.但是当我require
在另一个文件中的文件时,ruby和irb都无法找到所需的文件.
当前目录的内容:
C:\Documents\Prgm\Surveyor_Ruby\lib>dir
Volume in drive C has no label.
Volume Serial Number is AAAA-BBBB
Directory of C:\Documents\Prgm\Surveyor_Ruby\lib
10/09/2010 06:32 PM <DIR> .
10/09/2010 06:32 PM <DIR> ..
10/08/2010 03:22 PM 5,462 main (commented).rb
10/08/2010 03:41 PM 92 question.rb
10/08/2010 09:06 PM 2,809 survey.rb
10/09/2010 06:25 PM 661 surveyor.rb
10/08/2010 01:39 PM 1,546 test.rb
5 File(s) 10,570 bytes
2 Dir(s) 40,255,045,632 bytes free
Run Code Online (Sandbox Code Playgroud)
确认irb在正确的目录中:
C:\Documents\Prgm\Surveyor_Ruby\lib>irb
irb(main):001:0> Dir.pwd
=> "C:/Documents/Prgm/Surveyor_Ruby/lib"
Run Code Online (Sandbox Code Playgroud)
...但是irb无法加载survey.rb:
irb(main):002:0> require 'survey'
LoadError: no …
Run Code Online (Sandbox Code Playgroud) loadee.rb
puts '> This is the second file.'
Run Code Online (Sandbox Code Playgroud)
loaddemo.rb
puts 'This is the first (master) program file.'
load 'loadee.rb'
puts 'And back again to the first file.'
Run Code Online (Sandbox Code Playgroud)
当我跑"ruby loaddemo.rb"
,这工作正常.这两个文件都在同一个目录中,这就是我运行的目录.
但是,如果我将负载更改为require,并且有或没有扩展我得到:
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load
-- loadee.rb (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from loaddemo.rb:2:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我的问题当然是,为什么在这种情况下不需要工作?它应该,对吗?加载并要求使用不同的路径?
Ruby版本1.9.2
在Ruby中编写一个用零填充的整数是很容易的:
sprintf( "%010d", 345 ) #=> "0000000345"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用零填充String时,我找不到一个简单的解决方案:
sprintf( "%010d", "12AD" ) #=> ArgumentError: invalid value for Integer(): "12AD"
sprintf( "%010s", "12AD" ) #=> " 12AD"
Run Code Online (Sandbox Code Playgroud)
我想获得:
sprintf( "%010s", "12AD" ) #=> "00000012AD"
Run Code Online (Sandbox Code Playgroud) 我遇到了为ruby 1.9.2安装linecache19(ruby-debug19的依赖项)的问题
这是我的术语输出
$ rvm use 1.9.2
Using /home/bogdan/.rvm/gems/ruby-1.9.2-p180
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
$ rvm exec gem install linecache19 --backtrace
gem install linecache19 --backtrace
rvm 1.6.20 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]
ERROR: Error installing linecache19:
linecache19 requires Ruby version >= 1.9.2.
ERROR: Error installing linecache19:
linecache19 requires Ruby version >= 1.9.2.
Building native extensions. This could take a while...
Run Code Online (Sandbox Code Playgroud)
最后一个命令永远挂起,直到被^ C中断.
任何想法如何解决?
我正在尝试创建一个Active Record无表格模型.我的user.rb看起来像这样
class User < ActiveRecord::Base
class_inheritable_accessor :columns
def self.columns
@columns ||= [];
end
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(
name.to_s,
default,
sql_type.to_s,
null
)
end
column :name, :text
column :exception, :text
serialize :exception
end
Run Code Online (Sandbox Code Playgroud)
在控制器中创建新对象时
@user = User.new
我收到了错误
Mysql2 ::错误:表'Sampledb.users'不存在:SHOW FIELDS FROM users
我试图捆绑安装,但它显示上述错误或调试程序..请从终端找到详细的错误
Installing debugger-linecache (1.1.1) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/local/ruby/bin/ruby extconf.rb
checking for vm_core.h... no
checking for vm_core.h... no
Makefile creation failed
**************************************************************************
No source for ruby-1.9.2-p0 provided with debugger-ruby_core_source gem.
**************************************************************************
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog …
Run Code Online (Sandbox Code Playgroud) ruby-1.9.2 ×10
ruby ×6
rvm ×2
activerecord ×1
bundler ×1
gem ×1
import ×1
irb ×1
linecache ×1
model ×1
printf ×1
reflection ×1
require ×1
ruby-1.9 ×1
rubygems ×1