Разница между с и применением функций в котлине [дубликат]

Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer .

Обычно я использую SwiftMailer всякий раз, когда мне нужно для отправки писем с PHP.


Основное использование:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('

New message

Here goes the rest of my message

', 'text/html'); if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) { echo json_encode([ "status" => "OK", "message" => 'Your message has been sent!' ], JSON_PRETTY_PRINT); } else { echo json_encode([ "status" => "error", "message" => 'Oops! Something went wrong!' ], JSON_PRETTY_PRINT); }

Подробнее о том, как использовать SwiftMailer, см. в официальной документации .

49
задан n9Mtq4 14 April 2016 в 13:56
поделиться

3 ответа

Есть два отличия:

  1. apply принимает экземпляр в качестве получателя, а with требует, чтобы экземпляр передавался как аргумент. В обоих случаях экземпляр станет this внутри блока.
  2. apply возвращает приемник, а with возвращает результат последнего выражения в своем блоке.

Я не уверен, что могут быть какие-то строгие правила, какие функции выбрать. Обычно вы используете apply, когда вам нужно что-то делать с объектом и возвращать его. И когда вам нужно выполнить некоторые операции над объектом и вернуть другой объект, вы можете использовать либо with, либо run. Я предпочитаю run, потому что это более читаемо, на мой взгляд, но это вопрос вкуса.

50
ответ дан Michael 22 August 2018 в 20:46
поделиться
  • 1
    Примените игры лучше с приемниками с нулевым значением: foo?.apply { /* maybe do something */ } – Kirill Rakhman 14 April 2016 в 14:57
  • 2
    Хорошая точка зрения. run тоже неплохо. Что касается меня, то with абсолютно бесполезен. Я не использую его в своем коде. – Michael 14 April 2016 в 14:59
  • 3
    если вам нравится обладать вашими методами утилиты внутри объекта верхнего уровня, то с помощью может быть полезно ввести их в область для небольшого блока кода. – Mike Buhot 5 May 2016 в 11:46
  • 4
    Что вы понимаете под приемником ? Я не могу найти его документацию. – Igor Ganapolsky 22 May 2017 в 20:39
  • 5
    Приемник - это неявный аргумент this для функции расширения: kotlinlang.org/docs/reference/extensions.html – Michael 23 May 2017 в 09:58

Функция apply

//returns receiver T, T exposed as `this`
fun <T> T.apply(block: T.() -> Unit): T 

Описание

Функция apply вызывается на приемнике T, который будет отображаться как this в прошло лямбда-выражение. Приемник также автоматически становится результатом apply.

Функция with

//return arbitrary value R, not an extension function, T exposed as `this` 
fun <T, R> with(receiver: T, block: T.() -> R): R 

Описание

Функция with, в отличие от ко всем другим функциям области видимости (let, run, also, apply), не определяется как функция расширения . Вместо этого функция вызывается с объектом-приемником в качестве первого аргумента явно. То же, что и apply, приемник отображается как this в проходящей лямбда. Результатом лямбда, т. Е. Последнего утверждения, становится результат (R) of with.

4
ответ дан s1m0nw1 22 August 2018 в 20:46
поделиться
2
ответ дан Nonso Biose 5 November 2018 в 18:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: