2009-11-17 39 views
7

trong một số ngày tôi đang nói về dự án Rails tại trường đại học và tôi muốn giới thiệu khán giả với Ruby.Hiển thị ví dụ Ruby

Tôi muốn cho họ thấy một hoặc hai ví dụ mã thực sự tuyệt vời để chứng minh Ruby tuyệt vời như thế nào.

Bạn có biết ví dụ điển hình không?

Trân trọng

Trả lời

5

Tôi rất muốn đề xuất điều gì đó với .each, .inject và/hoặc .collect.Ví dụ:

# Sum 1,3,5,7,9,11,13 
[1,3,5,7,11,13].inject { |a,b| a+b } 

hoặc

# Print out all of the files in a directory 
Dir.glob('./my_cool_directory/*').each do |file| 
    puts file 
end 

hoặc

# Find the length of all of the strings 
["test", "hello there", "how's life today?"].collect{ |string| string.length } 
1

Bạn hoàn toàn nên hiển thị cho họ mảng của Dwemthy, nó rất đáng kể về sức mạnh nằm trong lập trình meta trong Ruby.

Find it here!

+0

Ví dụ này quá phức tạp. Nó phải bao gồm tối đa. 4-5 dòng. – brainfck

+2

Tôi thích cách thức, về cơ bản mọi hướng dẫn Ruby mà không có ngoại lệ, bạn gần như có thể cảm thấy những tua của sự điên rồ vươn ra để kéo người đọc vào cơn ác mộng tâm thần phân liệt của tác giả. – Juliet

+1

@Julet: Rõ ràng bạn chỉ đọc hướng dẫn được viết hoặc truyền cảm hứng bởi _why. – Pesto

2
irb(main):007:0> 2**2048 
=> 32317006071311007300714876688669951960444102669715484032130345427524655138867 
89089319720141152291346368871796092189801949411955915049092109508815238644828312 
06308773673009960917501977503896521067960576383840675682767922186426197561618380 
94338476170470581645852036305042887575891541065808607552399123930385521914333389 
66834242068497478656456949485617603532632205807780565933102619270846031415025859 
28641771167259436037184618573575983511523016459044036976132332872312271256847108 
20209725157101726931323469678542580656697935045997268352998638215525166389437335 
543602135433229604645318478604952148193555853611059596230656 

thử 2 ** 20000 hoặc bất kỳ số lượng lớn vô lý khác.

6

Chỉ cho họ cách bạn chuyển đổi 50 dòng mã bẩn xấu xí trong 3 đoạn mã sạch sẽ rất dễ hiểu. (Là dòng đầu tiên nhận xét)

Không cho biết bạn đang mát mẻ như thế nào với ruby. Nhưng làm thế nào mát mẻ họ sẽ được nếu họ sử dụng ruby ​​:)

+1

+1 cho đoạn thứ hai. –

+0

Ý tưởng hay!Trên thực tế, tôi muốn cho họ thấy, họ có thể tuyệt vời như thế nào ;-) – brainfck

+0

+1/đồng ý với The Wicked Flea –

4

Tôi ấn tượng với những gì có thể được thực hiện với tweetstream. Thật dễ dàng để theo dõi các chủ đề thịnh hành.

cài đặt với:

gem sources -a http://gems.github.com 
gem install intridea-tweetstream 

Đây là code demo:

#!/usr/local/bin/ruby 

if ARGV.size==1 
    keyword = ARGV.shift 
else 
    puts 'tweetmon usage: tweetmon <keyword>' 
    exit 1 
end 

require 'yaml' 
require 'rubygems' 
require 'tweetstream' 

config = YAML::load(File.open(File.expand_path('~/.twitter'))) 
user =config['username'] 
password =config['password'] 

TweetStream::Client.new(user,password).track(keyword) do |status| 
    puts "[#{status.created_at}-#{status.user.screen_name}] #{status.text}" 
end 

Bạn cần phải tạo một tập tin gọi .twitter trong thư mục gốc dùng của bạn, có dạng:

username: my-twitter-username 
password: my-twitter-password 

Lưu ý cách ruby ​​đọc cấu hình này chỉ trong 4 dòng (bao gồm cả yêu cầu yaml.)

Bạn chạy nó như thế này:

ruby tweetmon.rb keyword-to-be-monitored 

(Hãy nhớ rằng bạn cần phải thoát khỏi # trên Mac/Linux, ví dụ: tweetmon.rb \#devdays)

Từ một đoạn đơn giản như vậy, bạn có thể làm những việc như đếm thế nào nhiều lần mỗi cá nhân đóng góp, nắm bắt các phân đoạn của tweetstream vào một tệp, ... tất cả các loại thứ từ điểm bắt đầu đó ...

+0

Đó thực sự là một _library_ thực sự tuyệt vời. Không có bất cứ điều gì thực sự hét lên - "Ruby ROCKS!". –

2

Nếu bạn đã quen với Java, hãy tạo danh sách các chuỗi, sắp xếp nó với so sánh tùy chỉnh của riêng (chuỗi dài) và in danh sách. Làm tương tự trong Ruby ...

1

Ruby kháng nghị vì nó thường cho phép tôi làm những gì tôi muốn hoàn thành, thay vì dành nhiều thời gian "thiết lập" giải pháp. Vì vậy, một vài ví dụ:

Sum những con số không âm trong mảng [-1, 3, -10, 0, 5, 8, 16, -3,14159]

[-1, 3, -10, 0, 5, 8, 16, -3.14159].select { |x| x > 0 }.inject { |acc, x| acc + x } 

So với một hình thức phổ biến sang các ngôn ngữ khác:

sum = 0; 
foreach (x in [-1, 3, -10, 0, 5, 8, 16, -3.14159]) { 
    if(x > 0) sum += x; 
} 
return x; 

xử lý ngoại lệ đơn giản

x = method_that_might_raise_exception() rescue nil 

So với:

try { 
    x = method_that_might_raise_exception() 
} catch (Exception) { 
    x = nil 
} 

Cấp, bạn có thể muốn làm nhiều hơn với trường hợp ngoại lệ được ném ra, và Ruby cho phép bạn, nhưng khi bạn muốn giữ cho mọi thứ đơn giản, Ruby không đứng trong đường đi.

lớp mở của Ruby là một chủ đề gọn gàng, mặc dù họ có thể bị lạm dụng:

class Array 
    def sum_of_squares 
    map { |x| x * x }.inject { |acc, x| acc + x } 
    end 
end 

[1, 3, 5, 9].sum_of_squares 

Ngoài ra còn có các chủ đề phong phú của meta-lập trình, nhưng điều đó có thể là quá nhiều cho một giới thiệu về Ruby? Tôi hy vọng một cái gì đó ở đây là hữu ích cho bạn, và tôi muốn tình cảm của graffic thứ hai.

0

tôi sẽ hiển thị như thế nào đơn giản nó là tạo ra thoải mái dsl của - method_missing nói riêng rất đơn giản để nắm bắt nhưng rất mạnh mẽ và cho phép bạn thực hiện một số công cụ thực sự thú vị.