这种情况发生在你想将一堆函数应用于同一个变量的情况下,它可能如下所示:
map (\f->f 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)
但是从LYAH使用$
它非常整洁
map ($ 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?首先我在ghci中键入它$ 4 odd
,它失败了,然后我打字($ 4) odd
,它工作正常.然后我检查($ 4)
使用:t
哪个显示的类型($ 4) :: Num a => (a -> b) -> b
,odd
是odd :: Integral a => a -> Bool
.这似乎有道理,但对我来说仍然不清楚.
任何人都可以清楚地解释它,它是另一种常见用法$
,还有其他更多的用法$
.
我正在尝试编写一个程序,将字符串中的所有大写字符转换为小写和小写字符为大写.例如,如果字符串是"abcdE",它将在转换"ABCDe"后返回.这是我到目前为止所尝试的
class String
def is_upper?
self == self.upcase
end
def is_lower?
self == self.downcase
end
end
s = gets.chomp
if s.length <= 100
a = s.split(//)
b, c = Array.new
a.each do |m|
if m.is_upper?
b.push(m.downcase)
end
if m.is_lower?
b.push(m.upcase)
end
end
c = b.join
end
Run Code Online (Sandbox Code Playgroud)
但是我可以评估这个程序是非常错误的.我仍然是一个新手学习者.如果我的解决方案程序非常错误,请原谅我.请帮助我找到一个正确而简单的解决方案.
数组xs
由0到9之间的数字组成:
xs = [*0..9]
Run Code Online (Sandbox Code Playgroud)
测试奇偶校验,并将结果存储到位:
xs.map!(&:odd?)
puts xs.join(" ")
# => false, true, ..., true
Run Code Online (Sandbox Code Playgroud)
xs
按预期改变了.但我只是想改变数组的一部分
xs[5..-1].map!(&:odd?)
puts xs.join(" ")
# => 0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
我想这个slice
操作会返回一个副本.或者其他一些原因.
xs[...] = xs[...].some_operation
是一个解决方案,但没有任何分配,有没有办法做到这一点?