标签: ruby

试图学习/理解Ruby setter和getter方法

我只是学习编程并决定尝试Ruby.我确定这是一个愚蠢的问题,但是教练正在讨论setter和getter方法,我很困惑.这是一个例子:

class Human
  def noise=(noise)
    @noise = noise
  end

  def noise
    @noise
  end
end
Run Code Online (Sandbox Code Playgroud)

从这个,实例化类,我可以把它说出来:

man = Human.new
man.noise=("Howdie!")
puts man.noise
Run Code Online (Sandbox Code Playgroud)

这导致了 Howdie!

现在令我困惑的是,教师说没有getter方法(两种方法中的第二种),就没有办法与实例变量@noi​​se进行交互.

但是当我删除getter方法时,我仍然可以访问@noise,参见示例:

class Human
  def noise=(noise)
    @noise = noise
  end
end

man = Human.new
puts man.noise=("Howdie!")
Run Code Online (Sandbox Code Playgroud)

这与使用它的getter方法相同.

所以现在我很困惑.为什么需要吸气剂?没有它,教师的意思是无法访问实例变量?他有可能使用旧版本的Ruby吗?

在此先感谢您的帮助.

ruby

46
推荐指数
3
解决办法
5万
查看次数

为什么不为Rspec + Selenium使用共享的ActiveRecord连接?

似乎最常被接受的处理Selenium和测试的方法是避免使用事务夹具,然后在测试/场景之间使用像database_cleaner这样的东西.我最近遇到了以下文章,建议执行以下操作:

spec_helper.rb

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)

对于性能而言,这似乎比替代品更好.有没有人有理由不这样做?

ruby rspec ruby-on-rails capybara

46
推荐指数
2
解决办法
8457
查看次数

不区分大小写的数组#include?

我想知道什么是使String.include?方法忽略大小写的最佳方法.目前我正在做以下事情.有什么建议?谢谢!

a = "abcDE"
b = "CD"
result = a.downcase.include? b.downcase
Run Code Online (Sandbox Code Playgroud)

编辑:怎么样Array.include?.数组的所有元素都是字符串.

ruby string

46
推荐指数
3
解决办法
3万
查看次数

Ruby中的 - >(stab)运算符是什么?

在以下示例中:

default: -> { Time.now }
Run Code Online (Sandbox Code Playgroud)

什么->?我很熟悉,=>但我第一次见到->.

ruby

46
推荐指数
1
解决办法
2万
查看次数

将haml标签放在link_to帮助器中

是否可以在HAML中的link_to帮助器中添加html内容?

我试过这个,但我得到的只是语法错误:

= link_to "Other page", "path/to/page.html"
    %span.icon Arrow
Run Code Online (Sandbox Code Playgroud)

预期产量:

<a href="path/to/page.html">Other Page<span class="icon">Arrow</span></a>
Run Code Online (Sandbox Code Playgroud)

ruby haml hyperlink

46
推荐指数
3
解决办法
2万
查看次数

将字符串与多个模式匹配

如何在ruby中使用正则表达式将字符串与多个模式匹配.

我试图看一个字符串是否包含在前缀数组中,这不起作用,但我认为它至少证明了我要做的事情.

# example:
# prefixes.include?("Mrs. Kirsten Hess")

prefixes.include?(name) # should return true / false

prefixes = [
  /Ms\.?/i,
  /Miss/i,
  /Mrs\.?/i,
  /Mr\.?/i,
  /Master/i,
  /Rev\.?/i,
  /Reverend/i,
  /Fr\.?/i,
  /Father/i,
  /Dr\.?/i,
  /Doctor/i,
  /Atty\.?/i,
  /Attorney/i,
  /Prof\.?/i,
  /Professor/i,
  /Hon\.?/i,
  /Honorable/i,
  /Pres\.?/i,
  /President/i,
  /Gov\.?/i,
  /Governor/i,
  /Coach/i,
  /Ofc\.?/i,
  /Officer/i,
  /Msgr\.?/i,
  /Monsignor/i,
  /Sr\.?/i,
  /Sister\.?/i,
  /Br\.?/i,
  /Brother/i,
  /Supt\.?/i,
  /Superintendent/i,
  /Rep\.?/i,
  /Representative/i,
  /Sen\.?/i,
  /Senator/i,
  /Amb\.?/i,
  /Ambassador/i,
  /Treas\.?/i,
  /Treasurer/i,
  /Sec\.?/i,
  /Secretary/i,
  /Pvt\.?/i,
  /Private/i,
  /Cpl\.?/i,
  /Corporal/i,
  /Sgt\.?/i,
  /Sargent/i,
  /Adm\.?/i,
  /Administrative/i,
  /Maj\.?/i,
  /Major/i,
  /Capt\.?/i,
  /Captain/i,
  /Cmdr\.?/i,
  /Commander/i,
  /Lt\.?/i,
  /Lieutenant/i,
  /^Lt Col\.?$/i,
  /^Lieutenant Col$/i, …
Run Code Online (Sandbox Code Playgroud)

ruby regex

46
推荐指数
2
解决办法
2万
查看次数

用反斜杠单引号替换单引号

我有一个非常大的字符串需要转义它中的所有单引号,所以我可以将它提供给JavaScript而不会让它失望.我无法控制外部字符串,因此无法更改源数据.

例:

Cote d'Ivoir  -> Cote d\'Ivoir  
Run Code Online (Sandbox Code Playgroud)

(实际的字符串很长,包含很多单引号)

我正在尝试通过使用gsub字符串,但无法让它工作:

a = "Cote d'Ivoir"
a.gsub("'", "\\\'")
Run Code Online (Sandbox Code Playgroud)

但这给了我:

=> "Cote dIvoirIvoir"
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

a.gsub("'", 92.chr + 39.chr)
Run Code Online (Sandbox Code Playgroud)

但得到了相同的结果; 我知道它与正则表达式有关,但我从来没有得到那些.

ruby string

46
推荐指数
2
解决办法
2万
查看次数

如何在Ruby中对数组中对象的属性求和

我理解为了在Ruby中对数组元素求和,可以使用inject方法,即

array = [1,2,3,4,5];
puts array.inject(0, &:+) 
Run Code Online (Sandbox Code Playgroud)

但是如何在对象数组中求和对象的属性呢?

有一个对象数组,每个对象都有一个属性"现金",例如.所以我想将他们的现金余额总计为一个.就像是...

array.cash.inject(0, &:+) # (but this doesn't work)
Run Code Online (Sandbox Code Playgroud)

我意识到我可能会创建一个仅由物业现金组成的新阵列,并总结一下,但如果可能的话,我正在寻找一种更清洁的方法!

ruby arrays sum object inject

46
推荐指数
4
解决办法
3万
查看次数

设置'EDITOR'或'BUNDLER_EDITOR'环境变量

我试图在Sublime Text中打开一个gem,但没有成功.我安装了Bundler.这是正在发生的事情.

在命令行中:

$bundle open Devise
To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR
Run Code Online (Sandbox Code Playgroud)

当我去Bundler网站时,它说,

打开给定捆绑gem的源目录:

$ bundle打开GEM

这将在编辑器中打开提供的GEM的源目录.为此,必须设置EDITORBUNDLER_EDITOR环境变量.

我是所有这一切的新手.设置我的环境变量或环境变量的具体步骤是什么?我在Mac上,使用Sublime Text.EDITORBUNDLER_EDITOR

谢谢.

ruby command-line ruby-on-rails environment-variables bundler

46
推荐指数
2
解决办法
1万
查看次数

无法在macOS Sierra上安装mysql2 gem

我正在新的macOS Sierra setting中建立我的开发环境.

首先,我安装了Rbenv,Ruby(2.3.1),Homebrew等最新版本的MySQL(5.7.15).

$ brew install mysql
$ mysql.server start
Run Code Online (Sandbox Code Playgroud)

好的,MySQL已初始化.是时候安装mysql2 gem了......

$ gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
Run Code Online (Sandbox Code Playgroud)

但它没有用.


Building native extensions with: '--with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config'
This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
/Users/macuser/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20160921-16853-x1boio.rb extconf.rb --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... …
Run Code Online (Sandbox Code Playgroud)

ruby mysql macos rubygems macos-sierra

46
推荐指数
6
解决办法
2万
查看次数