走错论坛了吧?: ]
#13 楼 @darkbaby123 所以说这是互为因果嘛。因为 Ruby 在该领域没有好的选择,只能选择其它更成熟的。反过来,由于很少有人会在该领域选择 Ruby,因而 Ruby 在该领域也会越来越萎缩。
Ruby 在其它领域的现状,主要不是 Ruby 语言本身,而是领域相关的社区及资源远远不完善。
与 Ruby 目前的圈子组成也有相关,在 Web 领域,Ruby 开发者自然当仁不让。但在其它领域,要么是 领域专家不了解 Ruby,人家自然用自己熟悉的 语言 做项目,要么是 Ruby 开发者 ( 因为主要集中在 Web ) 不了解其领域,无法用 Ruby 来写该领域的项目。( 不是说没有人,只是相对 Web 领域, 其它领域的 Ruby 开发者占比太少). 互为因果吧,结果就是现状: Ruby 在强项领域一直很强,在弱项领域一直很弱。
Python 的很多领域的库,用 Ruby 不能实现吗?当然能。那用 Ruby 来实现一个吧,呃....... 这方面不懂啊。 ;)
领域相关的社区及资源还是需要一步步来,先有项目,然后再逐步完善吧。其实 Ruby 能做很多事情。
在不考虑第三方 gem 的情况下,可以把方法转为 Method 对象来取得一些信息
p method(:printf)
p method(:printf).owner
本来就可以在文件对象上直接调用 printf 啊
f.printf("%-10s\n", 'ruby')
printf 是 IO 类的一个实例方法,File 类继承于 IO,所以其对象可以直接用 printf
Windows 下玩 Ruby 一点问题没有。玩 Rails 略有坑。
@accept 另一种写法
def draw_diamond(count)
raise "Orz... " unless count.odd?
lines = (1...count).select(&:odd?)
.inject(['*']) { |m, i| m << "*#{' ' * i}*"}
[*lines, *lines.reverse.tap(&:shift) ].each { |l| puts l.center(count) }
end
draw_diamond(9)
draw_diamond(15)
即使磨好枪,也会有怀才不遇的这种可能。何况 程序员 这个圈子普遍是智商高,情商低,所以这个圈子大部分人被烹也是必然。 给楼主的建议:不要一直给别人做嫁衣。
Ruby 的梗不比 C++ 少。
windows 下也没问题。不知你所云。
终于要支持 字节码 文件了。
#11 楼 @mingle5566 对于数组的处理用 vector, 不过 bit-struct 对 array 的 处理比较啰嗦。
require "bit-struct"
class SentRTU < BitStruct
unsigned :order, 16, 'order'
unsigned :srv_type, 8, 'srv-type'
vector :router_addr, "router_addr", :length => 128 do
unsigned :byte, 8
end
def set_router_addr(str)
if str.length > router_addr.size - 1
raise "str.length should be less than router_addr.size - 1"
end
# bit-struct 对 vector 的写入处理比较啰嗦,只能挨个赋值。
# 像这样是不行的:
# str.bytes.each_with_index {|byte, i| router_addr[i].byte = byte }
addr = self.router_addr
str.bytes.each_with_index do |byte, i|
v = addr[i]
v.byte = byte
addr[i] = v
end
self.router_addr = addr
end
end
a = SentRTU.new
a.set_router_addr('abcdef')
puts a.router_addr
类似的 gem 还有 binstruct, cstruct . 在使用类似的 gem 时,一定要注意 struct 的 alignment 与相应的 C struct 的 alignment 要一致,不然就不对了。
#7 楼 @mingle5566 不客气,能用上就 OK 了。 #9 楼 @flowerwrong 嗯,如果结构很简单,自己进行 位操作 和 unpack 也是不错的选择。
#3 楼 @mingle5566 这个当然也可以。用这个 gem bit-struct 或 gem cstruct(不是 Fiddle::CStruct)
仅为 示范性伪代码
require 'bit-struct'
class MyStruct < BitStruct
...
unsigned :id, 8, "id" # 8 意为 8bit,也就一个byte。一个int32类型,就是32。以此类推。
...
end
data = recv(...)
my_data = MyStruct.new(data)
puts my_data.id
这两者都有对 C struct 的支持。Fiddle::CStruct 和 FFI::Struct. 具体使用参考其文档即可。
性能是重要的,但不是最重要的,更不是全部。它只是雷达图的一项。
[sec, min, hour, day, month, year, wday, yday, isdst, zone]
好文啊,建议楼主出 电子书。
只要自己用的开心就好嘛。
记得前一阵子 Weibo 上,一个 Erlang 的大神 和 一个 Go 语言的大神 为了一个 C++ 的库吵了起来,本来两人以前还是朋友,结果只是为了一个技术上的观点,朋友都做不成了。
技术并不是生活的全部,通过技术讨论来结识更多的朋友,本应该是一件很高兴的事。
百度要是能找得到的话,那才不正常呢。
#3 楼 @bluexuemei 转化为二维的话,用 each_slice 处理一下就可。
建议在多看看 Ruby 基础方面的书。
#4 楼 @bluexuemei 先求得秒,然后除以 86400 就可以了。
require 'time'
def time_to_float(s)
(Time.parse(s) - Time.parse("00:00:00")) / 86400
end
换个思路,把矩阵看成是 一维的 Array 后,再处理就更简单。
a =[ 2, 3, 4, 5,
3, 4, 5, 6,
1, 2, 3, 2,
8, 9, 5, 3 ]
b =[ 1, 1, 1, 5,
4, 5, 2, 3,
6, 5, 6, 3,
7, 4, 9, 7 ]
p a.zip(b).map &:max # => [2, 3, 4, 5, 4, 5, 5, 6, 6, 5, 6, 3, 8, 9, 9, 7]
楼主没说转换的规则是什么。如果如楼上 @est 说的,那试试这样:
def float_to_time(v)
raise RangeError, ":(~~~" if v < 0 or v > 1
Time.at(v * 86400).utc.strftime("%H:%M:%S")
end
p float_to_time 0.5
赞楼主一个。 看问题只看表面的,玩啥 OS 都是只知其表。
你这不是已经装成功了嘛
那个 unable to convert 是在生成文档时产生的,你可以忽略。
我觉得招聘贴才是这个论坛的精华贴,看图文并茂的招聘贴其实也是种享受了,比各种水贴,无病呻吟贴等都有内涵。
#4 楼 @lihaidong
V8 (指 C++ 写的那个 Engine ) 的移植性是相当好 (最起码对主流 OS 来说),主要是 libv8 这个 gem 在写的时候本身就没考虑 win 平台,所以,安装受阻也正常,更谈不上是恶心啊。就像我拿一个 win 的软件包直接在 Mac OS 下安装,肯定也不行啊。
这类问题基本上属于编译环境的差异导致。因为 V8 Engine 在多个平台跑是妥妥的。而且 libv8 就是包了一下 V8,所以只要用 mingw 编译好 V8 就 OK。按着这个思路, libv8 和 therubyracer 就都能解决安装问题。
运行结果,上图:
等后面有时间,可以专门写一下 libv8 和 therubyracer 在 win 下的编译安装。
这在哪都一样啊,大多数就是不懂才黑的,你问他真用过吗?他也只是 呵呵,听别人说的。就像鬼故事都是别人家的鬼故事。