我刚开始学习Ruby(第一次编程),并且有一个关于变量的基本语法问题,以及编写代码的各种方法.
克里斯派恩的"学会编程"教会我写一个像这样的基本程序......
num_cars_again= 2
puts 'I own ' + num_cars_again.to_s + ' cars.'
Run Code Online (Sandbox Code Playgroud)
这很好,但后来我偶然发现了ruby.learncodethehardway.com上的教程,并被教导写出像这样的精确程序......
num_cars= 2
puts "I own #{num_cars} cars."
Run Code Online (Sandbox Code Playgroud)
它们都输出相同的东西,但显然选项2是一个更短的方法.
是否有任何特殊原因我应该使用一种格式而不是另一种格式?
我正在尝试使用telegram-api构建Telegram机器人.到目前为止,我还没有遇到任何问题,因为我可以阅读测试以了解事情是如何工作的,但是在使用Servant构建webhook端点时我遇到了很多麻烦.总的想法是,当我Update
从webhook 收到一个,我发回一个回复.
问题在于我的postWebhook
代码,它希望收到一个Message
但是收到一个IO Message
.我认为这是因为Servant不希望我在该函数内部发出请求,因为我确实应该有类型EitherT ServantError IO (IO Message)
(部分应用BotHandler
)EitherT ServantError IO Message
.
我还在学习Haskell,但我知道我不得不从IO monad中获取消息?更新BotAPI
返回a Post '[JSON] (IO Message)
给我这个:No instance for (Foldable IO) arising from a use of ‘serve’
,这超出了我的初学者的知识,我可以看到摆弄类型只是将相同的问题移动到代码的不同部分.我只是不知道如何解决它.
以下是删除了敏感字符串的代码:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Control.Monad
import Control.Monad.Trans.Either
import Data.Proxy
import Data.Text (Text, pack) …
Run Code Online (Sandbox Code Playgroud)