Parameters / Return Values
この節では、もう少しFunction
を深掘りします。
ここで例示しているコードは実用性の無いものだけですが、できれば手元で動かしてみてください。
(そして、終わったら消しておいてください...😅)

A dream is a wish your heart makes
夢ってね あなたの心が描く願いごとなんだよ
Function
前節では無名関数
を右辺に組み込んでいましたが、これはちゃんと名前のある関数
を呼び出す形ですね😆
function testfunc()
print('i am test function')
end
-- (考えるのが面倒で 3 にしてますが...) キーはなんでも構いません。
vim.keymap.set('n', '<Leader>3', testfunc)

いい感じ〜❗
When you're fast asleep
In dreams, you will lose your heartaches
そっと眠りについたのなら
そこはもう夢の中、心の痛みなんてもうなくって

Parameter
さて、上の項でなんだか急にkeymap.set
がスッキリして見えるのは、この辺りの話が関わってきます😌
例えば、これはエラーになります。
パラメータを渡す場合はfunction()
~ end
で囲ってあげないといけないんですね🤔
function testparam(str)
print(str)
end
vim.keymap.set('n', '<Leader>4', function() testparam('hello') end)
Whatever you wish for, you keep
その願いはそっと膨らんでいるんだよ
Return Value
戻り値があるだけのfunction
は平気みたいです。
function testret()
print 'hello'
return 'good bye'
end
vim.keymap.set('n', '<Leader>5', testret)
ただ、これだと戻り値を全く無視しているので無意味ですよね😮 ...じゃあってことで
vim.keymap.set('n', '<Leader>5', print(testret()))
とかしたくなるんですけど、これはprint()
に "パラメータを渡してる" のでエラーになるやつです😅
...結局、function()
で囲うところに落ち着くわけです。
vim.keymap.set('n', '<Leader>5', function() print(testret()) end)

Have faith in your dreams and someday
Your rainbow will come smiling through
夢を信じていれば いつの日か
微笑みにも似た虹が 夢へと続く橋をかける
Call
関数に()
があったりなかったりするのはなんでなんだろうなーってなるんですけど、
要は()
をつけちゃうとfunction
型ではなくてこのfunctionの戻り値
の型は何かなー❓って判断をしに行っちゃうんですね😮
今回はvim.keymap.set()
を使用しているので、もう一回ヘルプを見返して欲しいんですけど、
これ、一回動かしてみればわかると思うんですが...、

rhs: expected string|function, got nil
って言われちゃいます😩
testfunc()
は戻り値が無いのでnil
ですね😰...ごもっとも過ぎて、ぐうの音も出ないやつ。
それに対して、こんなのとかはちゃんと動きます。
-- string を返す
function testcall1()
return ':'
end
-- function を返す
function testcall2()
return testfunc
end
vim.keymap.set('n', '<Leader>7', testcall1())
vim.keymap.set('n', '<Leader>8', testcall2())
keymap.set
の{rhs}
がtestcall1()
はstring
、testcall2()
はfunction
で戻ってくるのでOKです❗
ちゃんと<leader>7
でコマンドモードに入ったり、<Leader>8
でお返事されたりしますよね☺️
No matter how your heart is grieving
If you keep on believing
たとえ どんなに心が悲しみに染まっても
ずっと信じていれば
A Dream Is a Wish Your Heart Makes
この辺りは言葉にしちゃうとややこしい感じがしないでもないんですけど、使っていればすぐに慣れると思います😆
実際、わたしは割と感覚で書いています...😅
The dream that you wish will come true
あなたの願った夢は きっと叶う