正在学习 希望能坚持下去
原因是能够注意到小众语言 ruby,并愿意花精力学习 ruby,然后喜欢上 ruby 这本身就是一次筛选。
不生孩子就完事儿了
并不是奇怪 只是觉得复杂头都绕晕了,为了设计标准库的容器协议,会写出这么复杂的 constrain,好吧这肯定是有水平的,但我如果写完类似的代码我是崩溃的,至少头脑里会报警,会想是不是走上了歧途。
Fixnum is obsoleted
所谓的 auto fiber 就是 io 多路复用的吧
我在 irb 里尝试了一下,发现 2.6.5 和 2.7 结果不一样,
A.singleton_class.class_variables
这个在 2.7 里是空 []
有道理。
什么?!你作为老板连本科都没读过,还想让我给你打工?没门儿!
unless extremely bad things happen
我浅浅的学过 erlang,actor 模式太棒了。我在学习.net 想知道F#和erlang有什么重要区别🤔
这是在憋大招的节奏啊
所谓的 auto fiber 啥时候才能用上呢?
我见过半小时跑路的,不谈技术水平,首先得有正常的为人处事方式吧,技术好补,这东西不好补
当前命名空间,就是当前能够引用到的所有常量,变量,方法名的总集合,load 之后这个总集合里就多出 load 带来的新常量了,改变了这个总集合,所以叫“污染”吧。
假如有个文件 other.rb,内容是:
class Foo
def foo
puts 'foo'
end
end
那么,在 main.rb 里 load 这个文件,
load 'other.rb', true # 因为是true,所以Foo这个类名就在这里看不到了
f = Foo.new # 这里会 uninitialized constant Foo (NameError)
f.foo()
但如果是 load 'other.rb', false
load 'other.rb', false # 因为是false,所以Foo这个类被带进了当前作用域
f = Foo.new # 这里就正常调用
f.foo()
用 true 参数的时候,我想大概是这样的吧
#main.rb
module M
class Foo
def foo
puts 'foo'
end
end
end
M = nil # M应该是个不知道名字的模块
f = Foo.new #不管是Foo,还是M.Foo都没办法引用到了
f = M::Foo.new
我懂了,谢谢。但是有没有可能两个人写的 gem 起了一样的名字,导致都是 gem a,都有 module A,但功能不相关。当然如果都发布到一个网站比如 rubygems.org,是不会有一样名字的。 那么也就是说写 gem 要趁早,好名字被别人占了很麻烦。
命名规范是指?比如按域名一级一级的命名,就像 golang 的 package 一样,还是有其它方式。我观察别人写的 gems,命名就是起一个名字而已,通常就一个单词。
因为 ruby 诱惑,节省脑力、体力,有美感 要是有 erlang 的并发能力就好了,话说 autofiber guild 什么时候加进来啊。什么时候 truffleruby 能用于生产啊。对未来还是有期待。
倒是激起了我对 elixir 的兴趣
我不相信那个作者,我觉得他在欺骗。
不想深究深度学习的数学基础,能不能以黑盒的方式应用呢?
ruby 太好用了 好喜欢
调用 join 方法 separator 默认就是$,
Matz 看起来年轻 头发多 健康状况良好 不会 burn out
可文档上也没说 object_id 一定是内存地址啊
哦 好的
是这样的,我学习 ruby 知道 ruby 不需要函数重载,但是在 ruby 里一个函数有多种参数列表比比皆是。我用 Arrary 的 new 函数只是举个例子,它不是可以有几种参数调用形式吗,Array.new(size=0,default=nil) Array.new(array) Array.new(size) {|index| block }, 我的 foo 函数就是照着这个写的,不是针对这个函数。我想既然标准库里都这样,应该是一种风格吧,难道 ruby 里不鼓励这样,一个函数最好就一种参数列表。
以 Array 的 Initialize 为例,难道这样?
def param_pattern_match(pattern, params)
return false if pattern.size != params.size
match = true
pattern.zip(params) do|type, param|
unless type === param
match = false
break
end
end
match
end
class Array
def initialize(*variants)
case
when param_pattern_match([], variants)
'[size=0, default=nil]'
when param_pattern_match([Integer],variants)
'[size, default=nil]'
when param_pattern_match([Integer,Integer], variants)
'[size, default]'
when param_pattern_match([Array],variants)
'[array]'
else
'no match'
end
end
end