我喜欢ruby的一件事是,它主要是一种非常易读的语言(非常适合自我记录的代码)
然而,受到这个问题的启发:Ruby Code解释
并描述了如何||=在ruby中工作,我正在考虑我不使用的ruby习语,坦率地说,我并没有完全理解它们.
所以我的问题是,类似于引用问题的例子,我需要注意哪些常见但不明显的红宝石成语才能成为一名真正熟练的红宝石程序员?
顺便说一句,从引用的问题
a ||= b
Run Code Online (Sandbox Code Playgroud)
相当于
if a == nil || a == false
a = b
end
Run Code Online (Sandbox Code Playgroud)
(感谢Ian Terrell的更正)
编辑:事实证明,这一点并非完全没有争议.事实上正确的扩张
(a || (a = (b)))
Run Code Online (Sandbox Code Playgroud)
请参阅以下链接了解原因:
感谢JörgWMittag指出这一点.
可能重复:
Ruby中的|| =是什么意思?
请原谅我,如果这是一个新问题,但我正在读一本关于作者在辅助方法中使用此表达式的轨道上的书:
@current_user ||= User.find_by_id(session[:user_id])
Run Code Online (Sandbox Code Playgroud)
这种双管道的使用仍然是一个布尔OR语句吗?
如果是这样,它是如何工作的?
我有一个关于ruby中的|| =语句的问题,这对我来说特别有意义,因为我正在使用它来写入memcache.我想知道的是,是否|| =先检查接收器,看它是否在调用setter之前设置,或者它实际上是别名x = x || y
这在普通变量的情况下并不重要,但使用类似的东西:
CACHE[:some_key] ||= "Some String"
Run Code Online (Sandbox Code Playgroud)
可能会做一个比简单变量集更昂贵的memcache写入.奇怪的是我在ruby api中找不到关于|| =的任何内容,所以我自己无法回答这个问题.
我当然知道:
CACHE[:some_key] = "Some String" if CACHE[:some_key].nil?
Run Code Online (Sandbox Code Playgroud)
会实现这一点,我只是在寻找最简洁的语法.
有人可以向我解释以下Ruby代码的含义吗?(我在一个人的项目中看到了这段代码):
car ||= (method_1 || method_2 || method_3 || method_4)
Run Code Online (Sandbox Code Playgroud)
上面的代码和下面的代码有什么区别?
car = method_1 || method_2 || method_3 || method_4
Run Code Online (Sandbox Code Playgroud)
----------更新--------------
好吧,||=在读完@Dave的解释之后,我得到了运算符的含义,我的下一个问题是两者都是method_2,method_3并method_4返回一个值,哪一个值将分配给car?(我想最初car是零)
我刚开始学习RubyMotion,在很多例子中我都看到了||=语法.这是什么意思?
这是一个例子:
def window
@window ||= begin
w = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds
w.rootViewController = @navigationController
w
end
Run Code Online (Sandbox Code Playgroud)
搜索符号很困难,谷歌忽略了我的查询中的符号.
可能重复:
Ruby中的|| =是什么意思?
下面的行是什么意思?
a ||= {}
a ||= 1
Run Code Online (Sandbox Code Playgroud)
在irb中,它总是为上述两行返回a的类,作为哈希.提前致谢.
有人可以解释这段Ruby代码:
def add_spec_path_to(args) # :nodoc:
args << {} unless Hash === args.last
args.last[:spec_path] ||= caller(0)[2]
end
Run Code Online (Sandbox Code Playgroud)
我已经看到<<运算符用于连接字符串或用作其他语言的按位运算符,但有人可以在此上下文中解释它.它是以某种方式将空白的lamda附加到args上还是我完全错了?
我也可以看到它像这样使用:
before_parts(*args) << block
Run Code Online (Sandbox Code Playgroud)
是Hash关键字吗?
我也不确定||=操作员在说什么.
我在黑暗中同样如此caller(0)[2].
可能重复:
Ruby中的|| =是什么意思?
我测试过这样:
>> a||=3
=> 3
>> a
=> 3
>> a||=b
=> 3
>> b
NameError: undefined local variable or method `b' for main:Object
from (irb):11
Run Code Online (Sandbox Code Playgroud) params[:user][:role_ids] ||= []
Run Code Online (Sandbox Code Playgroud)
它有什么作用?
ruby -v = 1.9.2p290