相关疑难解决方法(0)

"!"的目的是什么?和"?" 在方法名称的末尾?

有时我看到Ruby中的方法有"?" 和"!" 在他们的最后,例如:

name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Run Code Online (Sandbox Code Playgroud)

我想知道他们的目的是什么?它们只是语法糖衣吗?

ruby syntax

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

我什么时候使用save !,创建!和update_attributes!在Rails?

我想知道什么时候使用爆炸!用于保存和更新记录的版本?我已阅读并听说你不需要他们,如果你只是一个保存记录或更新一个属性,如果你确信没有什么应该出问题,或总是使用他们的控制之外.我想我很擅长有多个东西被保存然后出现问题然后数据库中的数据不完整.我正在开发的当前Rails项目已完成50%以上,目前不包含任何刘海.我有一些自定义方法,我在更新或创建多个记录的模型中调用,并担心它们是否应该在某种交易中.

很抱歉,如果这看起来很分散,但我只是想弄清楚如何正确使用ActiveRecord中的保存功能,让我的生活更轻松,最后一点也没有压力.谢谢你的时间.

activerecord transactions ruby-on-rails

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

将方法应用于array/enumerable中的每个元素

这是我的阵列:

array = [:one,:two,:three]
Run Code Online (Sandbox Code Playgroud)

我想将to_s方法应用于我的所有数组元素array = ['one','two','three'].

我该怎么做(将可枚举的每个元素转换为其他元素)?

ruby arrays enumerable

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

在方法调用中是否存在memoization约定?

我想避免在方法调用中重新评估值.直到现在,我这样做:

def some_method
  @some_method ||= begin
    # lot's of code
  end
end
Run Code Online (Sandbox Code Playgroud)

但它最终变得非常丑陋.在某些代码中,我看到如下内容:

def some_method
  @some_method ||= some_method!
end

private

def some_method!
  # lot's of code
end
Run Code Online (Sandbox Code Playgroud)

我不喜欢最后的爆炸(!),所以我想出了这个:

def some_method
  @some_method ||= _some_method
end

private

def _some_method
  # lot's of code
end
Run Code Online (Sandbox Code Playgroud)
  • 是否在下划线上有一个好的约定?
  • memoized/non-memoized对方法是否有其他约定?
  • 是否有一些惯例来记忆多行方法?

ruby coding-style memoization

15
推荐指数
3
解决办法
3957
查看次数

命名约定:为什么Array#delete最后没有感叹号?

我正在学习Ruby,并且我已经看到方法名称末尾的感叹号按照约定意味着该方法self以某种方式修改.为什么不接着Array#delete用感叹号结尾,像slice!呢,因为delete从删除的元素self?我错过了什么基本的东西?

ruby naming-conventions

10
推荐指数
1
解决办法
673
查看次数

为什么有些Ruby方法需要爆炸而其他方法不是破坏性方法?

例如,array.pop不需要爆炸来永久改变阵列.为什么会这样,如果没有这种一致性,开发这些某些Ruby方法背后的原因是什么呢?

ruby methods

9
推荐指数
1
解决办法
2474
查看次数

如何从rails控制台获取详细的错误消息?

假设我希望使用存在的电子邮件从控制台创建用户.如果我做User.create(...)

因为模型验证(在这种情况下是唯一性的).create失败,rails控制台中的输出将显示:( rollback transaction用户未保存)

出于测试目的.他们是否可以获得触发回滚的显式错误?在这种情况下,它会说:"ROLLBACK:电子邮件不是唯一的".

ruby ruby-on-rails

5
推荐指数
2
解决办法
8379
查看次数

.downcase!语法简写

有人可以解释下面两段代码之间的区别吗?最后都有一个特色!.第一个版本只是简写吗?

print "Who are you?" 
user_input = gets.chomp.downcase!

print "Who are you?"
user_input = gets.chomp
user_input.downcase!
Run Code Online (Sandbox Code Playgroud)

ruby

3
推荐指数
1
解决办法
135
查看次数

什么 意味着在Ruby方法定义的最后?

我正在尝试通过阅读代码来学习Ruby,但我遇到了以下情况,我在任何教程/备忘单中都找不到.

def foo!
    # do bar

    return bar  
  end
Run Code Online (Sandbox Code Playgroud)

有什么意义的"!" 在方法定义?

ruby

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

"排序"和"排序"之间有什么区别!红宝石的方法?

来自Ruby的官方文档:

sort →new_ary sort {| a,b | block}→new_ary返回通过排序self创建的新数组.

排序的比较将使用<=>运算符或使用可选代码块完成.

该块必须实现a和b之间的比较,并且当a跟随b时返回-1,当a和b相等时返回-1,如果b跟随a则返回+1.

另请参见Enumerable#sort_by.

a = [ "d", "a", "e", "c", "b" ]
a.sort                    #=> ["a", "b", "c", "d", "e"]
a.sort { |x,y| y <=> x }  #=> ["e", "d", "c", "b", "a"]
Run Code Online (Sandbox Code Playgroud)

分类!→ary单击以切换源排序!{| a,b | block}→ary将自我排序到位.

排序的比较将使用<=>运算符或使用可选代码块完成.

该块必须实现a和b之间的比较,并且当a跟随b时返回-1,当a和b相等时返回-1,如果b跟随a则返回+1.

另请参见Enumerable#sort_by.

a = [ "d", "a", "e", "c", "b" ]
a.sort!                    #=> ["a", "b", "c", "d", "e"]
a.sort! { |x,y| y <=> x }  #=> ["e", "d", "c", "b", "a"]
Run Code Online (Sandbox Code Playgroud)

结果看起来是一样的,那有什么区别?

ruby sorting ruby-on-rails

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