以下是否正确?
change_column :tablename, :fieldname, :limit => null
Run Code Online (Sandbox Code Playgroud) 在Ruby中,我认为你可以调用一个尚未定义的方法,并捕获被调用方法的名称,并在运行时处理此方法.
Javascript可以做同样的事情吗?
我试图在Windows计算机上安装curb 0.8.0但我似乎无法到达任何地方.我一直在尝试每个网站3页深入我的谷歌搜索.请,任何人都知道如何安装这个单件.我已经下载了curl并将其解压缩到C:\ curl.我已将它添加到我的路径并运行命令:
gem install curb -- --with-curl-lib=C:\curl\bin --with-curl-include=C:\curl\include
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我一直得到同样的错误.有什么建议?
我想要的是:
obj = Foo.new(0) # => nil or false
Run Code Online (Sandbox Code Playgroud)
这不起作用:
class Foo
def initialize(val)
return nil if val == 0
end
end
Run Code Online (Sandbox Code Playgroud)
我知道在C/C++/Java/C#中,我们无法在构造函数中返回一个值.
但我想知道Ruby是否可行.
Ruby dabbler/newbie在这里不熟悉生态系统,如果这是其中一个超级问题,那么道歉.
有没有办法查看gem安装的所有文件和/或源代码?也就是说,我跑了
$ gem install sass
Run Code Online (Sandbox Code Playgroud)
而sass gem现在是我本地系统的一部分
$ gem list --local
...
sass (3.1.16, 3.1.2)
...
Run Code Online (Sandbox Code Playgroud)
我想知道gem install命令对我的系统的影响.是否有命令我可以运行以查看gem安装的所有文件?
一些google搜索后,man gem和gem help commands,我发现了contents命令.
$ gem content sass
但是,当我使用前面提到的sass gem运行此命令时,我得到以下结果
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/engine_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/functions_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/extend_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/logger_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/css2sass_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/subset_map_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/multibyte_string_scanner_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/callbacks_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/importer_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/css_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/scss_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/rx_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/less_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/cache_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/plugin_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass-convert
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/scss
Run Code Online (Sandbox Code Playgroud)
但是,这个列表似乎不完整,因为我知道有文件
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.2/lib/
Run Code Online (Sandbox Code Playgroud)
为什么不contents显示文件lib?
gem安装程序是否可以在gems文件夹之外安装文件?
是否有一个命令可以显示由gem安装的所有内容?
在编写ruby时,我常常难以调试无限递归.有没有办法从a SystemStackError中找到一个回溯来找出,究竟是无限循环发生在哪里?
给定一些方法foo,bar并baz在循环中相互调用:
def foo
bar
end
def bar
baz
end
def baz
foo
end
foo
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我只是收到消息test.rb:6: stack level too deep (SystemStackError).至少得到堆栈的最后100行是有用的,所以我可以立即看到这是一个循环foo,bar并且baz,像这样:
test.rb:6: stack level too deep (SystemStackError)
test.rb:2:in `foo'
test.rb:10:in `baz'
test.rb:6:in `bar'
test.rb:2:in `foo'
test.rb:10:in `baz'
test.rb:6:in `bar'
test.rb:2:in `foo'
[...]
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
编辑:
从下面的答案可以看出,Rubinius可以做到.不幸的是,一些rubinius错误阻止我使用我想要调试的软件.所以准确的问题是:
如何获得MRI(默认红宝石)1.9的回溯?
在ruby中,我知道模块功能可以通过使用module_function如此处所示而无需在模块中混合而可用.我可以看到它是如何有用的,因此您可以在模块中使用该功能而无需混合.
module MyModule
def do_something
puts "hello world"
end
module_function :do_something
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么你可能希望这两种方式定义函数.
为什么不呢
def MyModule.do_something
Run Code Online (Sandbox Code Playgroud)
要么
def do_something
Run Code Online (Sandbox Code Playgroud)
在哪种情况下,将函数混合使用或用作静态方法是有用的?
我正在处理货币,我想将数字向下舍入到小数点后2位.即使数字是500.0,我希望它是500.00才能保持一致.当我执行"500.00".to_d时,它将其转换为500.0.
什么是改变这种行为的好方法?我也使用这种方法向下舍入到2位数,并确保它总是有2位小数.
def self.round_down(x, n=2)
s = x.to_s
l = s.index('.') ? s.index('.') + 1 + n : s.length
s = s[0, l]
s = s.index('.') ? s.length - (s.index('.') + 1) == 1 ? s << '0' : s : s << '.00'
s.to_f
end
Run Code Online (Sandbox Code Playgroud) 我已经将Ruby 2.0与Windows Ruby安装程序,Unpacked DevKit(DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe)一起安装到Program Files并运行
ruby dk.rb init
Run Code Online (Sandbox Code Playgroud)
但生成的config.yml文件没有列出我的Ruby路径.其内容如下:
# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute …Run Code Online (Sandbox Code Playgroud) 是的,我知道,测试私有方法并不是一个好主意(我读过这个帖子 - http://www.ruby-forum.com/topic/197346 - 以及其他一些方法)
但是我该如何测试以下代码?
我用的是xmpp4r.在我的公共方法中,#listen我开始接收jabber消息,如下所示:
def listen
@client.add_message_callback do |m|
do_things_with_message(m)
end
end
private
def do_things_with_message(m)
#
end
Run Code Online (Sandbox Code Playgroud)
#add_message_callback - 运行块,当消息到来时(在不同的线程中)
所以,测试#listen方法很难,而且测试xmpp4r比我的测试更多#do_things_with_message
如何做好并测试#do_things_with_message?:)(http://www.ruby-forum.com/topic/197346#859664)
将一个新对象的私有方法重构为一个公共的(和一个方法的类 - 它是无意义的)
编辑:
这是关于清洁代码和正确测试的理论问题.在我的第一个链接中,人们认为测试私有方法很差.我不想欺骗#send,但我也没有看到任何可行的重构方法
ruby ×10
constructor ×1
curb ×1
curl ×1
currency ×1
decimal ×1
devkit ×1
gem ×1
initializer ×1
javascript ×1
math ×1
mixins ×1
module ×1
new-operator ×1
return ×1
rspec ×1
rubygems ×1