有时我看到Ruby中的方法有"?" 和"!" 在他们的最后,例如:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Run Code Online (Sandbox Code Playgroud)
我想知道他们的目的是什么?它们只是语法糖衣吗?
我想知道什么时候使用爆炸!用于保存和更新记录的版本?我已阅读并听说你不需要他们,如果你只是一个保存记录或更新一个属性,如果你确信没有什么应该出问题,或总是使用他们的控制之外.我想我很擅长有多个东西被保存然后出现问题然后数据库中的数据不完整.我正在开发的当前Rails项目已完成50%以上,目前不包含任何刘海.我有一些自定义方法,我在更新或创建多个记录的模型中调用,并担心它们是否应该在某种交易中.
很抱歉,如果这看起来很分散,但我只是想弄清楚如何正确使用ActiveRecord中的保存功能,让我的生活更轻松,最后一点也没有压力.谢谢你的时间.
这是我的阵列:
array = [:one,:two,:three]
Run Code Online (Sandbox Code Playgroud)
我想将to_s方法应用于我的所有数组元素array = ['one','two','three'].
我该怎么做(将可枚举的每个元素转换为其他元素)?
我想避免在方法调用中重新评估值.直到现在,我这样做:
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)
我正在学习Ruby,并且我已经看到方法名称末尾的感叹号按照约定意味着该方法self以某种方式修改.为什么不接着Array#delete用感叹号结尾,像slice!呢,因为delete从删除的元素self?我错过了什么基本的东西?
例如,array.pop不需要爆炸来永久改变阵列.为什么会这样,如果没有这种一致性,开发这些某些Ruby方法背后的原因是什么呢?
假设我希望使用已存在的电子邮件从控制台创建用户.如果我做User.create(...)
因为模型验证(在这种情况下是唯一性的).create失败,rails控制台中的输出将显示:( rollback transaction用户未保存)
出于测试目的.他们是否可以获得触发回滚的显式错误?在这种情况下,它会说:"ROLLBACK:电子邮件不是唯一的".
有人可以解释下面两段代码之间的区别吗?最后都有一个特色!.第一个版本只是简写吗?
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,但我遇到了以下情况,我在任何教程/备忘单中都找不到.
def foo!
# do bar
return bar
end
Run Code Online (Sandbox Code Playgroud)
有什么意义的"!" 在方法定义?
来自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 ×9
activerecord ×1
arrays ×1
coding-style ×1
enumerable ×1
memoization ×1
methods ×1
sorting ×1
syntax ×1
transactions ×1