Sangat menyebalkan bahwa Anda tidak dapat google "->" - pertanyaan yang bagus untuk ditanyakan!
Kevin
10
@ Kevin Anda bisa, bagaimanapun, menggunakan Stack Overflow built-in elastis pencarian untuk mencari "->": title:"->" [ruby] is:question. Kuncinya adalah menggunakan tanda kutip.
Memisahkan kunci dari nilai dalam literal peta hash.
->== Dash Rocket
Digunakan untuk mendefinisikan lambda literal dalam Ruby 1.9.X (tanpa args) dan Ruby 2.X (dengan args). Contoh yang Anda berikan ( ->(x) { x * 2 }& lambda { |x| x * 2 }) sebenarnya setara.
FYI 2 gaya tidak sepenuhnya dapat dipertukarkan jika Anda menggunakan do/ endkarena aturan diutamakan. Ini mencetak sebuah lambda Diperiksa: puts -> do 1 end. Ini melewati blok ke puts, mencuri dari lambda dan menyebabkan ArgumentError:puts lambda do 1 end
@Kelvin yang akan karena Ruby mencoba untuk menafsirkan puts lambda do 1 endsebagai puts(lambda) do 1 endbukan puts(lambda do 1 end). Yang terakhir sebenarnya bekerja - Ruby hanya mencoba untuk meneruskan blok ke putsmetode daripada lambdametode jika tidak ada tanda kurung.
PJSCopeland
1
@ PJSCopeland Saya tidak mengatakan Anda tidak bisa membuat mereka bertindak sama. Saya mengatakan bahwa itu bukan 100% sintaks yang dapat dipertukarkan, yaitu Anda tidak bisa hanya melakukan penggantian drop-in dalam semua kasus (karena kadang-kadang Anda membutuhkan tanda kurung tambahan untuk lambda).
Kelvin
@rdurand Apakah Anda melakukan edit dengan ringkasan "Stabby lambdas tidak dapat menerima argumen di Ruby 1.9"? Ini tidak akurat, setidaknya untuk 1.9.3 - argumen diperbolehkan.
->(x) { ... }sama dengan lambda { |x| ... }. Itu menciptakan lambda. Lihat Kernel # lambda A lambda adalah jenis proc, yang memastikan jumlah parameter yang dilewatinya benar. Lihat juga Proc :: new dan Kernel # proc .
"->"
:title:"->" [ruby] is:question
. Kuncinya adalah menggunakan tanda kutip.ruby "->"
adalah bagaimana saya menemukan posting ini :)Jawaban:
Dalam Bahasa Pemrograman Ruby ("Metode, Procs, Lambdas, dan Penutupan"), lambda yang didefinisikan menggunakan
->
disebut lambda literal .Kode ini setara dengan yang berikut ini.
Secara informal, saya telah mendengarnya disebut lambda lamban atau lusuh harfiah .
sumber
=>
== Hash RocketMemisahkan kunci dari nilai dalam literal peta hash.
->
== Dash RocketDigunakan untuk mendefinisikan lambda literal dalam Ruby 1.9.X (tanpa args) dan Ruby 2.X (dengan args). Contoh yang Anda berikan (
->(x) { x * 2 }
&lambda { |x| x * 2 }
) sebenarnya setara.sumber
do
/end
karena aturan diutamakan. Ini mencetak sebuah lambda Diperiksa:puts -> do 1 end
. Ini melewati blok keputs
, mencuri dari lambda dan menyebabkan ArgumentError:puts lambda do 1 end
puts lambda do 1 end
sebagaiputs(lambda) do 1 end
bukanputs(lambda do 1 end)
. Yang terakhir sebenarnya bekerja - Ruby hanya mencoba untuk meneruskan blok keputs
metode daripadalambda
metode jika tidak ada tanda kurung.lambda
).Roket lambda
Saya mendapatkannya dari artikel ini. Tapi pertama-tama pencarian google untuk ruby lambda steno http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
sumber
->(x) { ... }
sama denganlambda { |x| ... }
. Itu menciptakan lambda. Lihat Kernel # lambda A lambda adalah jenis proc, yang memastikan jumlah parameter yang dilewatinya benar. Lihat juga Proc :: new dan Kernel # proc .sumber