小编pop*_*nja的帖子

Ruby如何评估双引号(又名"")与String.new?

Ruby如何用双引号("")与String.new?初始化新字符串有什么不同?出于好奇和实验的目的,我覆盖了String#initialize:

class String
  def initialize
    puts "I <3 bananas" # they're delicious!
  end
end
Run Code Online (Sandbox Code Playgroud)

我想弄清楚的是:为什么这两个例子不同?

# Calling the String class directly, I can declare banana love!
irb(main):054:0> String.new
I <3 bananas
=> ""

# Using double quotes, this string is not as tasty :(
irb(main):055:0> ""
=> ""
Run Code Online (Sandbox Code Playgroud)

这对研究很烦人,因为每个Google结果似乎都集中在基本的Ruby语法上,而我在Ruby文档中找不到任何东西.

ruby

8
推荐指数
1
解决办法
337
查看次数

如何为包含"gets.chomp"的Ruby方法编写RSpec测试?

挑战

嗨!对于以下Ruby方法,如何在不重写方法的情况下使用RSpec测试来模拟用户输入?

def capture_name
  puts "What is your name?"
  gets.chomp
end
Run Code Online (Sandbox Code Playgroud)

我发现了类似的问题,但这种方法需要使用类创建.RSpec是否支持对不在类中的方法进行存根?

一个不同的作品,但我被迫重写方法

我可以重写方法,所以它有一个变量,默认值为"gets.chomp",如下所示:

def capture_name(user_input = gets.chomp)
  puts "What is your name?"
  user_input
end
Run Code Online (Sandbox Code Playgroud)

现在我可以写一个像这样的RSpec测试:

describe "Capture name" do
  let(:user_input) { "James T. Kirk" }

  it "should be 'James T. Kirk'" do
    capture_name(user_input).should == "James T. Kirk"
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby rspec

8
推荐指数
1
解决办法
5156
查看次数

在Ruby中,对于未定义的变量“ foo”,为什么“ foo = foo”不会引发错误?

foo是未定义的变量时,尝试访问它会引发NameError

foo
#=> NameError: undefined local variable or method `foo'

a = foo
#=> NameError: undefined local variable or method `foo'
Run Code Online (Sandbox Code Playgroud)

为什么不foo = fooNameError

foo = foo
#=> nil
Run Code Online (Sandbox Code Playgroud)

昨天,我花了几个小时来跟踪此行,这是程序中的错误...

capture = capture.to_i
Run Code Online (Sandbox Code Playgroud)

我原本打算做的是转换capture_strInteger。相反,我所做的是nil通过说来引入a capture = capture,然后将零变为a 0。所以我在做这个...

capture = capture.to_i
#=> 0
Run Code Online (Sandbox Code Playgroud)

但是我一直错误地假设NameError会像这样抛出一个变量...

capture = capture_str.to_i
#=> NameError: undefined local variable or method `capture_str'
Run Code Online (Sandbox Code Playgroud)

ruby

8
推荐指数
1
解决办法
107
查看次数

防止发送重复的电子邮件

我正在构建一个 Web 应用程序,用户单击一个按钮,然后单击发送一封电子邮件。在不稳定的连接上,有时用户会多次单击按钮,这会导致发送多封电子邮件。电子邮件是通过 Sendgrid 通过 SMTP 发送的。

如果多次提交相同的请求参数,是否有一种技术可用于仅发送一封电子邮件?我知道如何防止在我自己的应用程序上的 Web 表单之类的东西上多次提交,但我不确定如何使用 3rd 方电子邮件 API 做同样的事情。

email sendgrid

5
推荐指数
1
解决办法
4647
查看次数

为什么`alert("2nd");`执行`window.history.back();`?

当我运行以下两个JavaScript命令时......

> window.history.back(); alert("2nd");

...我希望窗口转到上一页,然后显示警报.实际上会发生"第二次"弹出,然后窗口又回来了.如果我像这样扭转他们......

> alert("2nd"); window.history.back();

...命令仍以相同的顺序执行.我对JavaScript控制流程有何了解?我怎么能window.history.back();先跑?

javascript

5
推荐指数
1
解决办法
472
查看次数

Ruby中[1,2,3] .to_enum和[1,2,3] .enum_for之间的差异

在Ruby中,我试图理解to_enumenum_for方法之间的关系.在我提出问题之前,我已经提供了一些示例代码和两个示例来帮助上下文.

示例代码:

# replicates group_by method on Array class
class Array
  def group_by2(&input_block)
    return self.enum_for(:group_by2) unless block_given?
    hash  = Hash.new {|h, k| h[k] = [] }
    self.each { |e| hash[ input_block.call(e) ] << e }
    hash
  end
end
Run Code Online (Sandbox Code Playgroud)

示例#1:

irb (main)> puts [1,2,3].group_by2.inspect
=> #<Enumerator: [1, 2, 3]:group_by2> 
Run Code Online (Sandbox Code Playgroud)

在示例#1中:group_by[1,2,3]不传入块的情况下调用数组,返回使用该命令生成的枚举器self.enum_for(:group_by_2).

例#2

irb (main)> puts [1,2,3].to_enum.inspect
=> #<Enumerator: [1, 2, 3]:each> 
Run Code Online (Sandbox Code Playgroud)

在示例#2中,通过调用to_enum数组上的方法生成枚举器[1,2,3]

题:

枚举器是否在示例1和2中生成,以任何方式表现不同?我可以从检查的输出中看到它们显示略有不同的标签,但我可以发现调查员的行为有任何不同.

# Output for example #1 …
Run Code Online (Sandbox Code Playgroud)

ruby enumeration enumerable

5
推荐指数
1
解决办法
1643
查看次数

标签 统计

ruby ×4

email ×1

enumerable ×1

enumeration ×1

javascript ×1

rspec ×1

sendgrid ×1