locale encoding 应该是对应 LC_*
设置?windows 没有.
external encoding 主要处理 IO 的自动转换,但是可以在 open
加 :encoding
参数来覆盖默认的编码设置.
filesystem encoding 主要用来对付文件名.
src encoding 是 internal encoding, 主要是字符串/正则字面量的编码,设置 #coding: binary
的话直接在源文件写 gbk 的字符串也是可以的 (有时要手动 force_encoding 一下).
ruby 不统一内码的,字符串自带 encoding 信息,根据你的需求选择编码,可以减少很多不必要的转换
有信仰是你自己的事,不要以此为由在程序里乱搞...
无 method
`echo '1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n17\nFizz\n19\nBuzz\nFizz\n22\n23\nFizz\nBuzz\n26\nFizz\n28\n29\nFizzBuzz\n31\n32\nFizz\n34\nBuzz\nFizz\n37\n38\nFizz\nBuzz\n41\nFizz\n43\n44\nFizzBuzz\n46\n47\nFizz\n49\nBuzz\nFizz\n52\n53\nFizz\nBuzz\n56\nFizz\n58\n59\nFizzBuzz\n61\n62\nFizz\n64\nBuzz\nFizz\n67\n68\nFizz\nBuzz\n71\nFizz\n73\n74\nFizzBuzz\n76\n77\nFizz\n79\nBuzz\nFizz\n82\n83\nFizz\nBuzz\n86\nFizz\n88\n89\nFizzBuzz\n91\n92\nFizz\n94\nBuzz\nFizz\n97\n98\nFizz\nBuzz' >&2`
第二个是 rails 1 的写法,分号后的部分叫做 url matrix parameter, 但没流行起来,没进到标准里,rails 就改回正常的 url 写法了
我的 arch 虚拟机就装了个 awesome, 最后还是把 gui 关了,只开个 sshd 用 iterm 连上去... 用不了⌘太郁闷,还有好多要设置的
#15 楼 @willmouse 正要投送硬币就消失了.? 难道因为管理员是 php 党...
感谢大大发片 +1024, 如果传上 bilibili 就更棒了...
#11 楼 @jiyinyiyong 嗯,haskell 这个命名 sense 值得吐槽...
就你这个样例来说,用 angular (缺点是不能和 jq 一起用) 或者 rivets (比 angular 轻很多,可以和 jq 一起用) 把 UI 数据绑定到 data object, 就可以少做很多判断了
data.point 和 data.date 不能用空值,属于客户端 validation 的范畴,html5 加了不少校验属性, 可以用 jquery.h5validate 配合 required / pattern / maxlength / min / max
属性去搞。代码中几乎不用判断才对...
反正最后服务器端还得判断一次的,rails 就是 model 里加一行 validate presence 或者 length, 也不用 if ... else
判断的
#9 楼 @zhenning #10 楼 @jiyinyiyong 那是 macvim 的 changelog, 不是 vim...
不过带中文的文件里光标终于对得上了...
对于这种 null 问题,正常语言都有一些手段去减少 if else boiler plate 的...
Groovy 有 elvis 运算符 (样子像猫王...) a?.b?.c?.d
(coffeescript 里也可以这么用哦)
Lisp 里 nil
就是空链表,空字符串也是 nil
, 要判断的情况其实要少很多
Haskell 有 Maybe
monad, 然后用 do-notation 就不用写一堆 if else 了
foo x = do
x <- b x
x <- c x
x <- d x
return x
foo (Just a) -- Nothing or Just d
Scala 有仿 Maybe
monad 的 Option
, 可以用 for {...}
语法去做
for {
x <- b(x)
x <- c(x)
x <- d(x)
} yield x
ruby 只有一个 nil
很简单,有的情况 a.b.c.d rescue nil
就行了。rails 还提供了 a.try(:b).try(:c).try(:d)
来方便链式调用。赋初始值的情况可以用 ||=
.
如果 lz 说的是 js, 在 js 里 null
, undefined
不是对象,没什么可以改进的办法... undefined
可以是变量名比较蛋疼,没有 ||=
也很郁闷... 不过用 coffee 可以添加一些改进。
#16 楼 @blacktulip 可以啊,但是利用语言提供的基础设施的话,实际可以省很多事呢
#14 楼 @blacktulip 这是继承的基本之基本吧,is a Phrase
also a String
? Of course!
另外一点点好处:我们知道 String 有拷贝构造函数可以这么用 String.new "str"
, 那么构造函数都不用自己写了
从 C 编程的角度看:
linux 优点是带 prctl, fmemopen mac 优点是带 strnstr, DTrace 支持更好点,和 llvm/clang 比 gcc 更先进
从 Ruby 程序员的角度看:
mac 的优点是 brew 的 recipe 根本不用学
从 UI 设计者的角度看:
mac 的优点是 UI / UX 真的很舒适一致,直接影响你做出来的页面效果有木有
从 sysadmin 的角度看:
用 linux 的话,各种系统检测工具和部署环境一致性更高,不用切换 mind set
还有就是 SC2 和 LOL 有 mac 版...
#9 楼 @quakewang 1 是为了高效率,少创建很多数组,2 是为了通过测试...
class Phrase < String
def word_count
r = Hash.new 0
scan(/\w+/){|w| r[w.downcase] += 1 }
r
end
end
如果过几天谁来发一帖 "曾经的女朋友和她的青梅竹马同学一起了", 可以火
油腻的小镇...
#14 楼 如果有说哪里不 OO 的话,就是那个 class
... design pattern? 难道这个 ruby 是 java 程序员教的...
#18 楼 @blacktulip 考官大人的心思大概是要你把访问实例变量改成访问 attr_reader... @words
=> words