"计算机比较的是字符编码"是正确的,其实就是比较字符串在内存里面的 byte 而已,用的是 memcmp
int rb_str_cmp(VALUE str1, VALUE str2)
{
long len1, len2;
const char *ptr1, *ptr2;
int retval;
if (str1 == str2) return 0;
RSTRING_GETMEM(str1, ptr1, len1);
RSTRING_GETMEM(str2, ptr2, len2);
if (ptr1 == ptr2 || (retval = memcmp(ptr1, ptr2, lesser(len1, len2))) == 0) {
if (len1 == len2) {
if (!rb_str_comparable(str1, str2)) {
if (ENCODING_GET(str1) > ENCODING_GET(str2))
return 1;
return -1;
}
return 0;
}
if (len1 > len2) return 1;
return -1;
}
if (retval > 0) return 1;
return -1;
}
补充一个Time.zone=(time_zone)
也是的
你这用用会被别人骂的吧?方法 C 加个带默认值得参数也不行?
第 2 中你 pictures 表需要 2 了外键字段?要是再加几个 model 还是需要 has_many :pictures,你怎么处理?
Rails 4.2 直接model.industry = nil
没问题,你 rails 什么版本?
不是 post 的问题。你的 link_to 是属于哪个 action?我以为是你的 start 这个 action 有两个作用,既显示 link_to 又想 game.start。如果不是的话就是我搞错了。但是也不是 post 的问题,get 的时候,你点了这个链接浏览器地址栏的地址是/1/start 这样吗?把 log 也贴出来吧
再想想你想要什么。 你看的 Rails 教程或者 guide 里面,肯定有个 new action,还有个 create action,为什么不能只有一个 new 或者 create 就行呢?
问题问错了,你用了错误的方法当然达不到正确的结果。 先想明白你想要达到什么效果,然后问怎么实现这个效果。最后在帖子里描述你做了什么,以及你认为你这样做出了什么问题。
我搞错了,可能没问题,不太确定。
有可能你 Thread.new 创建线程 t1 的时候,i=1, 然后线程 t1 并没有立即执行,而是主线程执行了,这时候 i 变成了 2,这时候你的 t1 开始执行,i 的值就不对了。你遇到的问题并不是上述情况引起的,我是说这样写有风险。
要这样写Thread.new(i) { |number| ...}
把你的 UserKid 文件头部和所在目录结构贴一下,还有 user.async_self 都干了啥
代码写的不对,thread 里面使用主线程的变量 i 不线程安全。
puts + byebug
rails 默认的 session 机制是保存在 cookie 里面的,并不是存在服务器上
google ctags
而且我记得 ruby 启动之后并不是一个线程,是有两个线程的,忘记另一个线程是干嘛的了。
1.9 之后 MRI 有用 native thread 的,只是因为有 GIL 的存在不能用多核
convention over configuration 这个原则主要是写框架的人用的,“初学者"不必纠结。 这个原则是很多人使用 rails 的原因,因为不用写配置文件或者配置代码,所以能提高开发效率。 比如 rails 自动根据 model 名字得到数据库表,你知道有这个约定就行了,想知道原理多看文档和源码。
comment_counter + 1
或者 google“rails render collection index" 第一个结果
第二个问题看文档或者 guide
我知道了 lisp 系的语言有这个概念,ruby 没有吧?
今天看到一个好东西 https://libraries.io/
如六楼所说。guide 看完了吗,没有的话先看 guide,能解决你很多疑问,比如这里有对 render 和 redirect_to 的解释。
关系型数据库使用连接池是为了多线程 server (如 puma) 的情况。 如果使用的 redis-rb 这个 client 话,只用 $redis 一个连接也是能保证线程安全性的,因为 redis-rb 内部每一个命令都是有锁的。 这和 redis 是单线程并没有关系,redis 是可以同时处理多个 client 链接的。 redis 也可以用线程池。
前两年因为到 monad 卡住了没学会 haskell,春节这几天要不要再试试呢
是 kernel 中的吧?kernel 中的 print 最终也会调用 IO#print 的
不高明解法一个
str1 = str.each_line.map do |line|
line.sub(/(?<=\$)(.*)(?==)/) do |match|
match.split.join('_')
end
end
p str1