我是Ruby的新手(也是面向对象的),我不知道为什么下面的东西在Ruby中不起作用
我用一个新方法扩展了String类。很简单。现在我想扩展Fixnum类。String对象出现在类中的某个位置,但我不能使用前面定义的方法。为什么?这是正常的吗?
这是String的新方法:
class String
public
def convert
case self
when "0"
"zero"
when "1"
"one"
.
.
Ruby和StackOverflow newb在使用Ruby时遇到了我的第一个主要障碍。我真的很难理解Procs和Lambdas。这是我正在使用的代码。
def procBuilder(message)
Proc.new{ puts message; return}
end
def test
puts "entering method"
p = procBuilder("entering proc")
p.call
puts "exit method"
end
test
按照设计,这是为了抛出一个LocalJumpErro
我正在上编程课,在和老师一起写代码的时候遇到了一个问题。我正在尝试学习关于混合和枚举模块的部分,并像讲师一样制作了这个文件,但它对我不起作用。到目前为止,我已经安装了Ruby,并且已经成功地使用RVM管理Ruby和Rails版本,所以我不明白为什么这对我不起作用。任何帮助都将不胜感激。
以下是我在终端中收到的错误的截屏:
下面是我的示例代码:
# Enumerable as a mixin
class ToToList
include 'Enumerable'
attr_accessor :items, :
我试图在Ruby中使用反射方法,但遇到了一种我发现非常令人惊讶的行为。
以下示例在IRB和调用ruby脚本时的工作方式似乎有所不同:
示例1:
def myfun; end
p respond_to?(:myfun)
在IRb中,这是'true',在脚本中是'false‘。
示例2:
ml = methods
def myfun; end
p methods - ml
在IRb中,这是:myfun。脚本中:[]。
我在1.8,1.9mri,JRuby 1.5.6等下发现了这个,所以我认为这是正常的。
为什么会有所不同?
我很确定'respond_to?‘这是查看
我正在尝试检查来自用户的输入是否与RegEx [a-zA-z]匹配,所以我已经检查了文档中正确的方法。我在中找到了match?,并将文档中显示的示例复制到irb,但我得到的不是true,而是以下内容:
2.3.3 :001 > "Ruby".match?(/R.../)
NoMethodError: undefined method `match?' for "Ruby":String
Did you mean? match
from (irb):1
from /usr/local/rvm/rubies/ruby
在我的rails服务器中,当我进入“rails控制台生产”时,就会出现这个错误,我不知道为什么。我要做的是生成用户信息并将其保存到我的数据库中。我猜有一些json或符号错误,但我不能解决...任何帮助都将不胜感激。
这是我的错误消息。
user_controller.rb:17:in `<top (required)>': superclass must be a Class (Symbol given) (TypeError)
from /home/ec2-user/.rvm/gems/ruby-2.2.5/gems/activesupport-4.2.5/lib/act
我使用的是Ruby 1.9.2和Ruby on Rails 3.2.2。我有以下方法:
# Note: The 'class_name' parameter is a constant; that is, it is a model class name.
def my_method(class_name)
case class_name
when Article then make_a_thing
when Comment then make_another_thing
when ... then ...
else raise("
我是鲁比的新手。遵循教程:和。
终端输出(OS ubuntu 16.04):
me@xxx:~$ rvm list
rvm rubies
=* ruby-2.4.0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
me@xxx:~$ ruby --version
The program 'ruby' is currently not installed. You can install it by typing:
sudo apt install ruby
me@
考虑如下所示的简单枚举器:
natural_numbers = Enumerator.new do |yielder|
number = 1
loop do
yielder.yield number
number += 1
end
end
我的问题是:为什么ruby要求我们在yield对象上调用yield?换一种说法:为什么我们不能用yield number取代yielder.yield number?在这个例子中,如果它被允许,它看起来是一样的。有没有以一种不平凡的方式使用yielder的例子?如果有,你能给我一个吗?如果不是,那么what的用途是什么?
谢谢。
我正在学习Ruby,但我很难预测Ruby在某些情况下的行为。例如,以下内容会导致语法错误:
[2, 3, 4].any? do |x|
(x > 1
and x < 4)
end
但这是很好的汇编:
[2, 3, 4].any? do |x|
(x > 1 and
x < 4)
end
(差别在于and的位置)
为什么前者不能编译,而后者成功,我怎么会知道呢?也就是说:由于上面的语法看起来完全不直观,所以的正式语法在哪里,或者像这样的指南,所以我不需要仅仅猜测Ruby的行为并通过尝试和错误来找出它?
这是我从一本书上抄下来的。“Ruby编程的终极指南”版权所有(c) 2006-2016萨蒂什·塔里姆
请查看代码和错误消息。为什么我会得到这个错误?
我已经检查了我的输入,重新输入代码,退出irb,重新进入irb,重新输入代码,同样的结果。我的错误是什么?
irb(main):001:0> 10.times do |num|
irb(main):002:1* square = num * num
irb(main):003:1> return num, square
irb(main):004:1> end
Traceback (most recent call la
我试图了解ruby是如何处理产额和返回语句的,并注意到有时,带return语句的块上的收益率是非法的,但有时有效。我有下面的例子,我很难理解:
def foo
yield
end
def bar
foo do
return 'asdf'
end
end
在上述情况下,我知道以下情况将会失败:
foo do
return 'asdf'
end
> LocalJumpError: unexpected return
但是,以下内容将有效(尽管它将返回零,而不是'asdf'):
bar
=> nil
我的问题是
在本例中,访问Struct块中的default变量似乎不起作用:
default = 'test'
A = Struct.new(:a, :b) do
def initialize(*args)
super(*args)
self.b ||= default
end
end
它引发以下错误:
'initialize': undefined local variable or method `default' for #<struct A a=2, b=nil> (NameError)
有人能解释一下为什么会发生这样的事
在Ruby1.8(我的版本是1.8.7-72)中,这段代码:
foo = lambda do
for j in 1..2
return
end
end
foo.call
使用LocalJumpError崩溃
test2.rb:3: unexpected return (LocalJumpError)
from test2.rb:2:in `each'
from test2.rb:2
from test2.rb:6:in `call'
from test2.rb:6
为什么要这么做?但是,在我的Ruby1.9版本上,它似乎运行得很好
我在处理ruby(on rails)超时时遇到了这个奇怪的问题。这次超时了
timeout(10) do
//some code involving http calls that takes more than 10 seconds
end
不起作用。但是这个超时
timeout(20) do
timeout(10) do
//some code involving http calls that takes more than 10 seconds
end
end
20秒后超时。我读到ruby中的超时不会正常工作,如果它涉及到系统调用。如果是这种情况,那么任何数量的嵌套超时也应
我找到了用Ruby编写相同条件的三种方法:
#1
if 1==1
puts "true"
end
#2
puts "true" if 1==1
#3
if 1==1 then puts "true" end
为什么我不能这么做?
#4
if 1==1 puts "true"
我不明白:
为什么然后和end在#3中是需要的,以及为什么我需要改变第2条的工作顺序。
声明#4似乎是最自然的方式来写这篇文章。我不明白为什么不可能。
我在Heroku上使用Rails应用时遇到了一些非常奇怪的行为。基本上,我在控制器中做了一个非常简单的post,但由于缺少模板异常而失败。我实在搞不懂为什么这个内置的控制器动作需要一个模板(??)。奇怪的是,这在本地运行得很好--异常只发生在已部署的应用程序上。这就是我从Heroku日志中得到的所有信息。
Started POST "/camps" for ............ at 2011-11-17 23:27:47 +0000
ActionView::MissingTemplate (Missing template camps/create, applicatio
在Rails教程中的Ruby类和继承介绍中,Michael问为什么在Rails控制台中运行static_pages_controller.rb时,一个操作在调用StaticPagesController对象时返回nil:
class StaticPagesController < ApplicationController
def home
end
...
end
rails控制台中的:
>> controller = StaticPagesController.new
=> #<StaticPagesController:0x22855d0>